Flutter中如何将十六进制转换为有符号二进制补码十进制?
解决8位十六进制补码转有符号十进制的问题
Dart的int.parse默认会将十六进制字符串解析为无符号的任意精度整数,所以'8E'会得到无符号值142。要得到8位有符号二进制补码对应的十进制值,需要手动处理符号位:
- 先解析为无符号整数:
final unsigned = int.parse('8E', radix: 16);(结果为142) - 判断是否超出8位有符号数的最大值(0x7F,即十进制127):如果无符号值大于0x7F,说明是负数,用
无符号值 - 2^8(即0x100)计算补码对应的负数
具体代码示例:
String hexValue = '8E'; int unsignedInt = int.parse(hexValue, radix: 16); int signedInt = unsignedInt > 0x7F ? unsignedInt - 0x100 : unsignedInt; print(signedInt); // 输出-114
如果需要处理其他长度的补码(比如16位、32位),只需替换对应的阈值和模值:
- 16位:最大值为0x7FFF,模值为0x10000
- 32位:最大值为0x7FFFFFFF,模值为0x100000000
内容的提问来源于stack exchange,提问作者Microcad
相关产品推荐
相关产品推荐

