谁能给我解释一下这个功能,我无法理解
Could anyone please explain me this function, I am not able to understand this
unsigned long fileSize = file.size();
byte buf[4];
buf[0] = (byte) fileSize & 0xFF;
buf[1] = (byte) (fileSize >> 8) & 0xFF;
buf[2] = (byte) (fileSize >> 16) & 0xFF;
buf[3] = (byte) (fileSize >> 24) & 0xFF;
谁能给我解释一下这个code.assuming一个你选择大小的文件
这只是找到一个 4 字节整数的 4 个字节。它以十六进制表示您从 2020 年开始查找 [2,0,2,0] 的操作。
它的方法是移动位并使用 AND 和全 1 的掩码。
程序正在将一个无符号长整数的四个字节存储到另一个字节数组中。语句 buf[0] = (byte) fileSize & 0xFF;
执行 bit-masking,因此从无符号长数中提取最后 8 位。为了进一步提取 8 位,我们将数字右移 8 位,然后再次执行 bit-masking 等等。
代码采用文件大小的低 4 字节(unsigned long
可能是 4 或 8 个字节,具体取决于 platform/compiler),并将这 4 个单独的字节存储到 [= little-endian byte order.
中的 11=] 数组
取fileSize
的低8位存入buf[0]
,然后取next-lowest的8位存入buf[1]
,以此类推buf[2]
和 buf[3]
.
假设您想将十进制数 8375 拆分为数字。你可以这样做:
unsigned value = 8375;
unsigned digit_0 = value % 10; // Gives 5
unsigned digit_1 = (value / 10) % 10; // Gives 7
unsigned digit_2 = (value / 100) % 10; // Gives 3
unsigned digit_3 = (value / 1000) % 10; // Gives 8
好吧,您发布的代码就是这样做的。只有它将数字拆分为 octets,即 pairs of hexadecimal digits。 IE。每个八位字节都可以取 [0..255].
范围内的值
并且发布的代码使用了按位运算:
(a >> 8)
其实就是(a / 256)
,而(a & 0xFF)
就是(a % 256)
.
在小端系统上它与:
memcpy(buf, &fileSize, 4);
或
union
{
unsigned long filesize;
unsigned char buff[4];
}x = {.filesize = file.size());
unsigned long fileSize = file.size();
byte buf[4];
buf[0] = (byte) fileSize & 0xFF;
buf[1] = (byte) (fileSize >> 8) & 0xFF;
buf[2] = (byte) (fileSize >> 16) & 0xFF;
buf[3] = (byte) (fileSize >> 24) & 0xFF;
谁能给我解释一下这个code.assuming一个你选择大小的文件
这只是找到一个 4 字节整数的 4 个字节。它以十六进制表示您从 2020 年开始查找 [2,0,2,0] 的操作。
它的方法是移动位并使用 AND 和全 1 的掩码。
程序正在将一个无符号长整数的四个字节存储到另一个字节数组中。语句 buf[0] = (byte) fileSize & 0xFF;
执行 bit-masking,因此从无符号长数中提取最后 8 位。为了进一步提取 8 位,我们将数字右移 8 位,然后再次执行 bit-masking 等等。
代码采用文件大小的低 4 字节(unsigned long
可能是 4 或 8 个字节,具体取决于 platform/compiler),并将这 4 个单独的字节存储到 [= little-endian byte order.
取fileSize
的低8位存入buf[0]
,然后取next-lowest的8位存入buf[1]
,以此类推buf[2]
和 buf[3]
.
假设您想将十进制数 8375 拆分为数字。你可以这样做:
unsigned value = 8375;
unsigned digit_0 = value % 10; // Gives 5
unsigned digit_1 = (value / 10) % 10; // Gives 7
unsigned digit_2 = (value / 100) % 10; // Gives 3
unsigned digit_3 = (value / 1000) % 10; // Gives 8
好吧,您发布的代码就是这样做的。只有它将数字拆分为 octets,即 pairs of hexadecimal digits。 IE。每个八位字节都可以取 [0..255].
范围内的值并且发布的代码使用了按位运算:
(a >> 8)
其实就是(a / 256)
,而(a & 0xFF)
就是(a % 256)
.
在小端系统上它与:
memcpy(buf, &fileSize, 4);
或
union
{
unsigned long filesize;
unsigned char buff[4];
}x = {.filesize = file.size());