Help with a piece of code
Show older comments
Hey all, I'm working on a school project that's about changing the order of characters in a binary array. In the process of writing it, I found a bit of code online to help me:
v = sprintf('%d', array3)
endarray = v - '0'
Basically, what this does is it takes the value of array3, which for example is [1011010] and creates a variable endarray, which in turn becomes [1 0 1 1 0 1 0]. When I implemented this piece of code I didn't quite know how it functioned, and it wasn't explained on the page where I found it, so I decided to go back to it later. Unfortunately I still haven't figured it out. I can't wrap my head around the combinations of sprintf, %d, and the -'0'.
Any help with understanding these two lines would be greatly appreciated.
1 Comment
Pal Szabo
on 21 Sep 2017
I recommend to replace "Help with a piece of code" with something more meaningful
Accepted Answer
More Answers (1)
Generating a "binary" (logical) array:
a = rand(10,1) > 0.5;
Transforming the binary array into a string. v is a character array.
v = sprintf('%d', a)
Transforming the string into a numeric array:
endarray = v - '0'
Matlab does implicit conversions. When you do arithmetic operation with characters, it transforms them into double and then performs the operations.
'0' - 48
Please note that all that is unnecessary if you want an array of doubles from a logical array. You could just have:
endarray = double(a)
2 Comments
Guillaume
on 21 Sep 2017
The starting point is not a logical array but a binary number encoded as a decimal, e.g.
a = 1011010;
Hence the trip through a char array to get the digits of that decimal number.
José-Luis
on 21 Sep 2017
Thanks. I was wrong but in essence sort of right.
Definitely maybe.
Categories
Find more on Characters and Strings in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!