Converting string to number with spaces
Ältere Kommentare anzeigen
I have a 3061622 long character, which is differentiated by three spaces, I want to form an array from this string such that a after each space a new number is formed. For example suppose I have the character such that, "111001000100 100000100000 1100100100" so the first element of the array formed has 111001000100, second has 100000100000 and so on.
2 Kommentare
Peng Li
am 4 Apr. 2020
You could split the string by space and after that do a str2double. You might also want to change the specific type as well, as matlab by default stores all numerical numbers as double. You can use cast function to convert to different integer types.
Abdul Ghani Zahid
am 4 Apr. 2020
Akzeptierte Antwort
Weitere Antworten (2)
Ameer Hamza
am 4 Apr. 2020
Bearbeitet: Ameer Hamza
am 4 Apr. 2020
try this
str = "111001000100 100000100000 1100100100";
num = cell2mat(textscan(str, '%u64'));
Result
num =
3×1 uint64 column vector
111001000100
100000100000
1100100100
If you want these binary numbers to be converted to decimal
str = "111001000100 100000100000 1100100100";
num = cell2mat(textscan(str, '%bu64'));
Result
num =
3×1 uint64 column vector
3652
2080
804
8 Kommentare
Abdul Ghani Zahid
am 4 Apr. 2020
Ameer Hamza
am 4 Apr. 2020
How is output different? Are you talking about the first code or the second one?
Abdul Ghani Zahid
am 4 Apr. 2020
Ameer Hamza
am 4 Apr. 2020
Ok. I get it. Your binary numbers have 32 digits. MATLAB does not support a data type that can support 32 digits. In that case, your best bet is to save it in uint64 format. It is decimal value equivalent to the binary number. Try the second code.
Abdul Ghani Zahid
am 4 Apr. 2020
Abdul Ghani Zahid
am 4 Apr. 2020
Ameer Hamza
am 4 Apr. 2020
I guess you are using some old version of MATLAB that is why textscan does not recognize '%bu64' format.
If you want to store the binary digits in a numeric form, then note that a decimal number, e.g., 101010, is not equivalent to the binary number (101010)b. It just contains 0 and 1 digits, but in reality, it is a number in base 10, you cannot apply any binary operations on it.
Walter Roberson
am 4 Apr. 2020
%b is new as of R2019b or perhaps R2020a.
Walter Roberson
am 4 Apr. 2020
str = "111001000100 100000100000 1100100100";
cellfun(@bin2dec, regexp(str, '\s+', 'split'))
3 Kommentare
Walter Roberson
am 4 Apr. 2020
Or as hinted by David Hill,
str = "111001000100 100000100000 1100100100";
bin2dec(regexp(str, '\s+', 'split'))
Abdul Ghani Zahid
am 5 Apr. 2020
Walter Roberson
am 5 Apr. 2020
mask = c >= 2^31;
c(mask) = 2^31 - c(mask) ;
c = int32(c) ;
Note that this code does not bother to reconstruct -0 correctly. Binary integer encodings that have separate sign have the possibility of a number in which the sign bit is set but the other bits are 0, and that represents "negative zero". The difference between negative zero and positive zero is that positive number divided by 0 gives positive infinity but a positive number divided by negative zero gives negative infinity.
Kategorien
Mehr zu Numeric Types finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!