How to convert decimal into hexadecimal in "S function" Matlab ?

1 visualización (últimos 30 días)
Md Rabiul Islam
Md Rabiul Islam el 5 de Jul. de 2021
Editada: Jonas el 7 de Jul. de 2021
Hello,
I am using Matlab 2021a. In simulink, I am giving input value ( 2748) and expecting output value in hexadecimal. As we know that simulink is not supporting "character", I am generating output in UINT8. But my requirement is to produce :
Input : UINT16 ( 2748)
output : UINT8
y1[0] = 10 ( decimal conversion of "0A")
y1[2] = 188 ( decimal conversion of "BC")
I have written below code for conversion :
z[0] = *u0; // z is a working vector with data type UINT16 and u0 is an input
z[1] = 16;
z[2] = fmod(z[0],16);
z[3] = (z[0]-z[2])/z[1];
z[4] = fmod(z[3],z[1]);
z[5] = (z[3]- z[4])/ z[1];
z[6] = fmod (z[5], z[1]);
z[7] = (z[5]- z[6])/ z[1];
y1[0]= z[7]; // giving output = 0 // y is output with data type UINT8
y1[1]= z[5]; // giving output = 10
y1[2]= z[4]; // giving output = 11
y1[3]= z[2]; // giving output = 12
But I need output -
y1[0] = decimal conversion of first two bytes = 00 10 > 10
y1[1] = decimal conversion of first two bytes = 11 12 > 188
I also have attached the simulink block and output. Can I ask for recommendation how can I write code to generate such output ?

Respuestas (2)

dpb
dpb el 5 de Jul. de 2021
Editada: dpb el 5 de Jul. de 2021
>> uint8(hex2dec(reshape(strrep(sprintf('%#X',2748),'X',''),2,[]).'))
ans =
2×1 uint8 column vector
10
188
>>
  2 comentarios
Md Rabiul Islam
Md Rabiul Islam el 7 de Jul. de 2021
hex2dec or dec2hex is not accepted in "S- function". If I use this function, it shows error.
dpb
dpb el 7 de Jul. de 2021
That's bizarre. Why in the world would that not be acceptable, but I guess it is what it is...one workaround is
>> txt=cellstr(reshape(strrep(sprintf('%#X',2748),'X',''),2,[]).');
>> uint8(cellfun(@(c)sscanf(c,'%x'),txt))
ans =
2×1 uint8 column vector
10
188
>>

Iniciar sesión para comentar.


Jonas
Jonas el 7 de Jul. de 2021
Editada: Jonas el 7 de Jul. de 2021
input = uint16(2748)
input = uint16 2748
output = zeros(2,1,'uint8');
output(1) = bitshift(input,-8);
output(2) = bitand(input,255);
output
output = 2×1
10 188
Hexadecimal is just a way of displaying, not a data type.

Productos


Versión

R2021a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by