![](/img/trans.png)
[英]Convert a 64 bits floating point number into two integer numbers < 2^32 and back in Lua 5.1
[英]How does this lua function convert bits to 32 bit
我找到了这个函数,我想弄清楚它是如何将每个 8 位字符转换为 32 位的。 该函数的代码如下。
local function getBits32(streamString)
local W, X, Y, Z = string.byte(streamString, streamPosition, streamPositon + 3);
streamPosition = streamPosition + 4;
return (Z * 16777216) + (Y * 65536) + (X * 256) + W;
end;
正在阅读 WWXXYYZZ
一个字节,保存从 0-255 (0x00 到 0xFF)的值,所以W
保存这些值。
要计算更高的值,您需要乘以 256。
(X * 256)
任何更高的值,您都需要再次乘以 256。
(Y * 256 *256)
与(Y * 65536)
最后,再次乘以 256。
(Z * 256 *256 *256)
与(Z * 16777216)
将它们加在一起,这些值都不重叠。
乘法只是一种防止值相互碰撞的编程技巧,因此它们可以在一个连续的块中流式传输到寄存器中。
如果取 3、4、5、6 的值3, 4, 5, 6
然后将它们相加,而不进行预乘,则会得到 18。这不好,因为计算机不知道将每个字节放在哪里。 假设它是RGBA。 好的,现在你有一个暗红色的像素,但是你的绿色、蓝色和 alpha 通道在哪里?
这就是它们相乘的原因,以便可以序列化整个构造。
3 + (4 *256) + (5 *256 *256) + (6 *256 *256 *256)
= ...
我不会计算它,你明白了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.