关于signed char类型的16进制数据转成带符号的10进制问题

博客讲述了在C++学习中遇到的问题,关于signedchar类型的16进制数据如何转换为带符号的10进制数。作者通过实例0xFFF32A详细解析了转换过程,包括数据分割、位移运算和符号判断,最终得到与程序计算一致的结果-68822。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

在最近的学习中,遇到了一个疑惑,三组16进制的数据分别为0xFF,0xF3,0x2A;这三组16进制的数分别表示一个24bit的16进制数据的高/中/低三位,即为0xFFF32A这一个16进制数据

通过网络上的16进制转10进制计算器计算得出0xFFF32A = 16773930,但在本地程序中通过16进制转10进制得到的结果为0xFFF32A = -68822,咨询了朋友后才知道在程序中0xFFF32A 是一个signed char类型的数据.
网络计算器

实际程序计算


signed char类型的16进制数据如何转成带符号的10进制数?

仍按照0xFFF32A 为例子,我把数据按照8bit一组来分割,分割为 高位0xFF/中位0xF3/低位0x2A

然后将这三个数使用网络上的16进制转10进制计算器分别计算得出高位255/中位243/低位42

通过查询资料可知signed char类型可表示-128~127共计256个数,那么可以将高于127的数进行一个减法运算高位255 - 256 = -1/中位243 - 256 = -13/低位42;

然后分别将这高/中/低位的三个数分别乘上对应位置的倍数0x10000/0x100/0x1(转换为10进制即为65536/256/1)

最后将三个结果相加即可:-1*65536 + -13*256 + 42*1 = -68822手动计算结果与程序计算结果一致.


总结

signed char类型的16进制数据转成带符号的10进制是我在学习C++过程中遇到的一个问题,手动换算方法也是我通过查询各种资料琢磨出来的,可能方法比较麻烦,欢迎各位大佬提供更加简单明了的方法~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值