谁能解释这个功能,我听不懂

时间:2020-08-03 20:51:20

标签: c++ c arduino

   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;  
   

任何人都可以向我解释此代码。假设文件大小由您选择

5 个答案:

答案 0 :(得分:3)

该代码占用文件大小的低4个字节([Route("/for_sale/Virginia_Heights/WV/{beds}/{type}] public IActionResult GetPropertyInfo(string beds, string type) { // ..... } 可能是4个字节或8个字节,具体取决于平台/编译器),并将这4个单独的字节存储到unsigned long数组中在little-endian byte order中。

它采用buf的最低8位并将其存储到fileSize中,然后采用其后最低的8位并将其存储到buf[0]中,依此类推,对于{{1 }}和buf[1]

答案 1 :(得分: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

好吧,您发布的代码就是这样做的。只有它将数字拆分为个八位字节,它们是个十六进制对数字。即每个八位位组都可以采用[0..255]范围内的值。

发布的代码使用按位运算: (a >> 8)实际上是(a / 256),而(a & 0xFF)(a % 256)

答案 2 :(得分:1)

程序将一个无符号长整数的四个字节存储到另一个字节数组中。语句buf[0] = (byte) fileSize & 0xFF;执行位屏蔽,因此从无符号长数中提取最后8位。要提取另外8位,我们将数字右移8位,然后再次执行位屏蔽等。

答案 3 :(得分:0)

这只是查找4字节整数中的4字节。您正在寻找从2020年开始发现[2,0,2,0]的情况。

它的操作方式是移位这些位,并使用全1的掩码与AND。

答案 4 :(得分:-1)

在小端系统上,它与:

Streaming output truncated to the last 5000 lines.
27230
current denom = 2
present number = 1
current number = 3
27231
current denom = 2
present number = 1
current number = 3
27232
current denom = 2
present number = 1
current number = 3
27233
current denom = 2
present number = 1
current number = 3
27234
current denom = 2
present number = 1
current number = 3
27235
current denom = 2
present number = 1
current number = 3
27236

memcpy(buf, &fileSize, 4);