Xelloss0618 发表于 2023-3-12 23:03 嗯明白了谢谢 ![]() |
cdmmye 发表于 2023-3-12 20:49 呃,没写错啊,看了一下文章,这是一个短整数,高10位表示长度,低6位始终为0x3F, 这个值是这样计算的,比如长度是82,那就是: 位或 (位左移 (82, 6), 0x3F) = 0x14BF 由于内存是小端序,它会显示成 BF 14,这个你不用理会。 所以这个算法里,你只需要取高10位,知道长度就行了。 取高10位: 位右移动 (0x14BF, 6) // 16位二进制,向左移动6位,剩下就是10位二进制的值了 取低6位也简单: 位与 (0x14BF, 0x003F) // 低6位的最大值就是0x3F,与这个值位与,就能获取底6位的值 |
Xelloss0618 发表于 2023-3-12 20:41 文章就这一句话 先解析开始的 BF 14 ,二进制为 0001 0100 10 @ 11 1111,高10位82,即为DoABC,低6为0x3F,为长类型 不会是文章自身写错了吧,看的很糊涂 |
cdmmye 发表于 2023-3-12 18:49 这图就没毛病了,内存是小端序,所以这个值实际上是 0x14BF,这不需要反转字节序。 取高10位也是正确的, 位右移 (0x14BF, 6) 取低6位就不知道是哪个了,文章我也没看到 |
Xelloss0618 发表于 2023-3-12 17:49 0xBF14 反转字节序得出的值 你说的是对的,我看了也应该是,百度说的是低6位我看的很糊涂 |
也不对啊,那个 5311 是 0xBF14 反转字节序得出的值,根本不是低6位(6位二进制的最大值是63)。 高10位算是对了,但那也是反转字节序后再取高10位才能得到的值 位或 (位左移 (位与 (数值, 0x00FF), 8), 位右移 (位与 (数值, 0xFF00), 8)) = 5311 = 0x14BF 位右移 (0x14BF, 6) = 82 |
Xelloss0618 发表于 2023-3-12 16:50 倒序16进制也没取对2进制 BF 14 ,二进制为 0001 0100 10 @ 11 1111,高10位82,即为DoABC,低6为0x3F 这是说的算法,我怎么处理也取不出这样的二进制 |
Xelloss0618 发表于 2023-3-12 16:50 抱歉那是我写错了 取高10位 = 82 低6 = 5311 十六进制为 BF14 |
|Archiver|手机版|小黑屋|递归火山软件开发平台
( 鄂ICP备18029190号 )
GMT+8, 2025-2-17 23:58 , Processed in 0.091934 second(s), 22 queries .
Powered by Discuz! X3.4
© 2001-2017 Comsenz Inc.