Creating a hex array with 4 digit blocks from an array of integers
17 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Art
el 21 de En. de 2017
Comentada: Walter Roberson
el 22 de En. de 2017
I am using R2013 and need to convert a large decimal array into hex stings.
The decimal numbers can be any positive integer, and I need to convert each number, then display each as a minimum two byte string with preceding zeros (with more bytes shown as the number increases).
e.g. decimal "1" should show up as '0x0001',
decimal "69876" should show up as '0x0001 0x10F4'
I created a rather cumbersome loop that does this perfectly, but with large arrays it takes too long.
I can get part way to a non-loop implementation with this code:
DecArray = [1 2 4 69876];
cellstr(dec2hex(reshape(DecArray,[],1), 4));
ans =
'00001'
'00002'
'00004'
'110F4'
But as you see the outputs
1) always have the same number of digits, and
2) aren't broken into 2 Byte blocks
Is there any way to go from these results to the ones I described earlier without another loop?
5 comentarios
Walter Roberson
el 22 de En. de 2017
I dunno. It just seems unlikely to me that the data could vary between 16 and 32 bits on the same plot.
Respuesta aceptada
Stephen23
el 21 de En. de 2017
Editada: Stephen23
el 21 de En. de 2017
V = [1,2,4,69876];
L = log(16);
for k = 1:numel(V)
N = 4*(1+fix(log(V(k))/L/4));
S = sprintf('%0*X',N,V(k));
Z = sprintf('0x%c%c%c%c ',S)
end
Prints this in the command window:
Z =
0x0001
Z =
0x0002
Z =
0x0004
Z =
0x0001 0x10F4
Note: does not work for zero: add N = max(4,N)
Más respuestas (1)
Guillaume
el 21 de En. de 2017
DecArray = [1 2 4 69876]';
h = arrayfun(@dec2hex, DecArray, 'UniformOutput', false);
cellfun(@(s) strcat('0x', cellstr(reshape([repmat('0', 1, mod(-numel(c), 4)), c], 4, [])')), d, 'UniformOutput', false)
3 comentarios
Ver también
Categorías
Más información sobre Characters and Strings en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!