Challanges representing hexadecimal values as "integer double" in uitable
显示 更早的评论
In a uitable, I’m editing multiple cells and I want to use hexadecimal (integer) as the input value. For most cases this turns out perfectly fine. However, hexadecimal values ending with 'e' are causing me a headache. It seems that Matlab interprets the input as string and converts the hexadecimal input (0xXXXX, without quotation marks) using ‘str2double’ before any callbacks are triggered. ‘str2double’ uses ‘sscanf’ behind the scenes and in ‘str2double’, ‘sscanf’ is called with format specifier ‘%f’. This makes sense when ‘str2double’ tries to convert to a double value. When ‘sscanf’ is called with ‘%f’, it probably triggers on the trailing ‘e’ for scientific notation. There is no value proceeding ‘e’ and ‘str2double’ fails to read the entire char-array and returns NaN.
I am able to catch the NaN-value and re-evaluate the string using ‘myStr2double’, where I call ‘sscanf’ with format specifier ‘%i’. This works, but it seems like an unnecessary step as not doing this works for all hexadecimal values (I’ve tested) except for those ending with ‘e’.
Here are some sample code to illustrate the problem:
str2double('0x1234')
returns 4660 (as expected)
str2double('0x123e')
returns NaN.
Is there a better solution to this behaviour, or am I trying to do something that is just outside of the intention?
In ‘myStr2double’, i call:
[a,count,errmsg,nextindex] = sscanf(s,'%i',1)
to read the entire hexadecimal char-array.
3 个评论
Tord Fjordheim Onstein
2021-9-10
"...am I trying to do something that is just outside of the intention?"
Yes. STR2DOUBLE is not documenented to convert hexadecimal numbers. For reliable conversion use functions which are designed and documented for converting hexadecimal, e.g. HEX2DEC, SSCANF.
Tord Fjordheim Onstein
2021-12-20
回答(1 个)
Maybe using hex2dec instead of str2double will work:
str2double('0x1234')
str2double('0x123e')
hex2dec('0x1234')
hex2dec('0x123e')
4 个评论
Another option is to use SSCANF:
sscanf('0x1234','%x')
sscanf('0x123e','%x')
Tord Fjordheim Onstein
2021-12-20
Walter Roberson
2021-12-20
preprocess to determine which conversion to apply.
Tord Fjordheim Onstein
2021-12-20
类别
在 帮助中心 和 File Exchange 中查找有关 Data Type Conversion 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!