How to convert decimal into hexadecimal in "S function" Matlab ?
1 次查看(过去 30 天)
显示 更早的评论
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 ?
0 个评论
回答(2 个)
dpb
2021-7-5
编辑:dpb
2021-7-5
>> uint8(hex2dec(reshape(strrep(sprintf('%#X',2748),'X',''),2,[]).'))
ans =
2×1 uint8 column vector
10
188
>>
2 个评论
dpb
2021-7-7
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
>>
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 String 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!