请问下述Lua函数getBits32是如何将8位字符转换为32位数值的?
8位字符转32位数值逻辑说明
你贴出的Lua函数是通过小端序字节拼接规则,将连续4个8位字符转换为一个32位无符号整数,执行流程如下:
- 调用
string.byte方法,从输入字符串streamString的streamPosition位置开始,连续读取4个字符的原始字节值(每个值范围0~255,对应8位),依次存入变量W、X、Y、Z注意:原代码中存在拼写错误,第二个参数的
streamPositon少了字母i,正确写法是streamPosition + 3 - 全局读取位置
streamPosition向后移动4位,为下一次读取做准备 - 通过乘法运算完成字节移位拼接,得到最终32位数值:
- 乘以256等价于将字节左移8位,对应第二个字节
X放在32位数值的第8~15位 - 乘以65536等价于将字节左移16位,对应第三个字节
Y放在32位数值的第16~23位 - 乘以16777216等价于将字节左移24位,对应第四个字节
Z放在32位数值的第24~31位 - 第一个字节
W不做乘法,直接放在32位数值的最低0~7位
- 乘以256等价于将字节左移8位,对应第二个字节
- 四个部分相加就是最终拼接完成的32位整数。
-- 修正拼写错误后的完整函数 local function getBits32(streamString) local W, X, Y, Z = string.byte(streamString, streamPosition, streamPosition + 3); streamPosition = streamPosition + 4; return (Z * 16777216) + (Y * 65536) + (X * 256) + W; end;
内容的提问来源于stack exchange,提问作者reet15
相关产品推荐
相关产品推荐

