When execute the below code ? the error message appear 'Index exceeds the number of array elements'?
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Hussain
am 12 Sep. 2022
Kommentiert: Walter Roberson
am 21 Sep. 2022
M_h="FFFFFFFFFFFFFFFF";
M="";
for i=1:16
M(end+1:end+4)=dec2bin(hex2dec(M_h(i)), 4);
end
0 Kommentare
Akzeptierte Antwort
Jérôme
am 12 Sep. 2022
M_h and M are string arrays because you used "". Here, you want to work with char arrays using '' (See for example these links for details about them: https://www.mathworks.com/help/matlab/characters-and-strings.html, https://www.mathworks.com/help/matlab/ref/char.html, https://www.mathworks.com/help/matlab/ref/string.html).
If you use the following code, you will not have the error anymore:
M_h='FFFFFFFFFFFFFFFF';
M='';
for i=1:16
M(end+1:end+4)=dec2bin(hex2dec(M_h(i)), 4);
end
3 Kommentare
Jérôme
am 19 Sep. 2022
In Text in String and Character Arrays, you can see that MATLAB shows how to access individual characters of a char array, but not for a string. Because strings are made to work at a higher level, not to work characters per characters, which is the perfect job for char arrays.
In your case, you can simply convert the string to a char array before your operation, and convert it back to a string after that:
M_h="FFFFFFFFFFFFFFFF";
M_h2 = convertStringsToChars(M_h);
M2='';
for i=1:16
M2(end+1:end+4)=dec2bin(hex2dec(M_h2(i)), 4);
end
M = convertCharsToStrings(M2);
Otherwise, if you really want to manipulate string directly, I imagine it's possible using the function extractBetween.
Weitere Antworten (1)
Walter Roberson
am 21 Sep. 2022
Using extractBetween() as suggested by @Jérôme is the approved way to work with characters inside strings. But you can also go to a lower level... which will give you faster code.
Double-quotes like you had is used for a string array, so below I show looping over a string array and using {} to extract characters
M_h = ["FFFFFFFFFFFFFFFF"; "DEADBEAFDEADBEAF"];
M = strings(size(M_h));
for K = 1 : numel(M_h)
this_M_in = M_h{K};
this_M_out = blanks(64);
for i=1:16
this_M_out(i*4-3:i*4)=dec2bin(hex2dec(this_M_in(i)), 4);
end
M(K) = string(this_M_out);
end
M
2 Kommentare
Jérôme
am 21 Sep. 2022
Nice, I didn't know we could convert a string to a char array using {}.
Is this mentioned somewhere in the official MATLAB documentation?
Walter Roberson
am 21 Sep. 2022
It was documented, at least at the time of introduction. I am having difficulty finding reference to it now.
Siehe auch
Kategorien
Mehr zu Characters and Strings finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!