Typecast a hex string to single
35 ビュー (過去 30 日間)
古いコメントを表示
I have strings of hex values that I need to typecast to single precision values. I don't actually care about the actual single precision value, I am just trying to package the binary into a single datatype for transmission.
I want something like
MyHexString = '7f8e2d38';
out = typecast(MyHexString,'single'); %This doesn't work because typecast needs number
But the typecast.m function requires a numeric value. All I want to do is to produce the single precision number equivalent of the binary data held in my hex string.
FYI: I was using
out = typecast(uint32(hex2dec(MyHexString)),'single');
This worked most of the time but is occasionally produced incorrect results because the hex2dec function produces a double and there is some loss on the subsequent uint32 cast. At least that's what I think is wrong.
How to I package hex into a single datatype?
2 件のコメント
James Tursa
2022 年 8 月 18 日
編集済み: James Tursa
2022 年 8 月 18 日
"... occasionally produced incorrect results ..."
Can you post some specific examples where this happens? How can there be a loss converting to uint32?
採用された回答
Jan
2022 年 8 月 18 日
編集済み: Jan
2022 年 8 月 18 日
str = '7f8e2d38';
vec = uint8(sscanf(str, '%2x'));
num = typecast(vec, 'single')
num = typecast(flip(vec), 'single') % Maybe MSB?
NaN due to initial 7f
13 件のコメント
Walter Roberson
2022 年 8 月 19 日
You are transmitting in binary, right? Rather than formatting the single precision data as text?
Because if so then it does not matter that the printable version of a series of bytes might be NaN, as long as the byte sequence is exactly recoverable when transmitted in binary.
format long g
s = '7f8e2d38';
d = uint8(sscanf(s, '%2x').')
df = typecast(fliplr(d), 'single')
typecast(df, 'uint8')
filename = tempname();
fid = fopen(filename, 'w')
fwrite(fid, df, 'single')
fclose(fid)
ls('-l', filename)
fid = fopen(filename, 'r')
dfr = fread(fid, '*single')
fclose(fid)
typecast(dfr, 'uint8')
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Logical についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!