TCL中十六进制与IEEE 754浮点数双向转换的内置方法问询
TCL 十六进制与浮点类型双向转换方法
TCL原生内置的binary命令就完全支持你需要的双向转换能力,无需安装第三方扩展,8.5及以上版本的TCL都可以直接使用。
浮点值转十六进制字符串
32位float转十六进制
使用binary pack的R(大端)/r(小端)格式符打包浮点值,再转换为十六进制即可:
# 示例:3.14 转 32位大端float对应十六进制 set float_val 3.14 set bin_data [binary pack R $float_val] binary scan $bin_data H8 hex_32 puts $hex_32 # 输出结果:4048f5c3
64位double转十六进制
使用binary pack的Q(大端)/q(小端)格式符处理即可:
# 示例:3.14 转 64位大端double对应十六进制 set double_val 3.14 set bin_data [binary pack Q $double_val] binary scan $bin_data H16 hex_64 puts $hex_64 # 输出结果:40091eb851eb851f
十六进制字符串转浮点值
32位十六进制转float
先把十六进制字符串转为二进制数据,再用对应格式符解析:
# 示例:4048f5c3 转 32位float值 set hex_32 4048f5c3 binary scan [binary format H8 $hex_32] R float_val puts $float_val # 输出结果:3.14
64位十六进制转double
同理用64位对应的格式符处理:
# 示例:40091eb851eb851f 转 64位double值 set hex_64 40091eb851eb851f binary scan [binary format H16 $hex_64] Q double_val puts $double_val # 输出结果:3.14
补充说明
- 格式符大小写对应字节序:大写
R/Q为大端(网络字节序),小写r/q为小端,根据你的十六进制数据的字节序选择即可。 - 如果不需要指定字节序,直接用当前系统原生字节序的话,可以用
f(32位float原生序)、d(64位double原生序)格式符,不需要额外判断大小端。
内容的提问来源于stack exchange,提问作者quantum231
相关产品推荐
相关产品推荐

