# When execute the below code ? the error message appear 'Index exceeds the number of array elements'?

6 views (last 30 days)
Hussain on 12 Sep 2022
Commented: Walter Roberson on 21 Sep 2022
M_h="FFFFFFFFFFFFFFFF";
M="";
for i=1:16
M(end+1:end+4)=dec2bin(hex2dec(M_h(i)), 4);
end
Warning: Hexadecimal numbers representing integers greater than or equal to flintmax might not be represented exactly as double-precision floating-point values.
Index exceeds the number of array elements. Index must not exceed 1.

Jérôme on 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
Hussain on 21 Sep 2022
Thanks for tour reply, appreciate your support.

### More Answers (1)

Walter Roberson on 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 = 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
M = 2×1 string array
"1111111111111111111111111111111111111111111111111111111111111111" "1101111010101101101111101010111111011110101011011011111010101111"
##### 2 CommentsShowHide 1 older comment
Walter Roberson on 21 Sep 2022
It was documented, at least at the time of introduction. I am having difficulty finding reference to it now.