双字节组合计算咨询:如何由[3E, 80]得到预期值250
问题解答
嘿,咱们一步步拆解这个问题,先搞清楚每个数值的含义,再验证你的思路对不对:
先转成十进制明确数值
首先把十六进制字节转成十进制方便计算:
- 十六进制
0x3E= 十进制 62 - 十六进制
0x80= 十进制 128
验证你的思路是否正确
如果按照你说的操作:把0x3E通过RoL左移8位(等价于乘以2^8=256),得到 62 * 256 = 15872,再加上0x80的十进制值128,最终结果是 15872 + 128 = 16000,这和你预期的250相差巨大,所以这个方法完全不对。
那怎么得到预期的250?
预期结果250对应的十六进制是 0xFA,咱们看看给定的两个字节0x3E和0x80怎么组合都得不到这个值:
- 直接相加:
0x3E + 0x80 = 0xBE = 190(十进制),不是250 - 按位或:
0x3E | 0x80 = 0xBE = 190,也不对 - 按位异或:
0x3E ^ 0x80 = 0xBE = 190,还是不对 - 交换字节顺序后左移相加:
0x80 << 8 + 0x3E = 20480 + 62 = 20542,依然和250无关
这时候可能需要你确认两个信息:
- 是不是给定的两个字节值写错了?比如是不是
0x00和0xFA,或者0xFA和0x00? - 是不是对“两个字节的组合结果”的规则理解错了?比如是不是某种校验和、位运算或者其他自定义规则?
内容的提问来源于stack exchange,提问作者SamL
相关产品推荐
相关产品推荐

