Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 谁能给我解释一下这个功能,我不懂_C++_C_Arduino - Fatal编程技术网

C++ 谁能给我解释一下这个功能,我不懂

C++ 谁能给我解释一下这个功能,我不懂,c++,c,arduino,C++,C,Arduino,谁能给我解释一下这段代码吗?假设一个文件的大小是你选择的这只是在寻找一个4字节整数的4字节。它以十六进制形式运行,就像从2020年开始查找[2,0,2,0]一样 它的方法是通过移位位,并使用所有1的掩码和。这只是查找4字节整数的4字节。它以十六进制形式运行,就像从2020年开始查找[2,0,2,0]一样 它的方法是移位位,并使用所有1的掩码和。该程序将无符号长整数的四个字节存储到另一个字节数组中。语句buf[0]=(字节)fileSize&0xFF执行位屏蔽,因此从无符号长数字中提取最后8位。为

谁能给我解释一下这段代码吗?假设一个文件的大小是你选择的

这只是在寻找一个4字节整数的4字节。它以十六进制形式运行,就像从2020年开始查找[2,0,2,0]一样


它的方法是通过移位位,并使用所有1的掩码和。

这只是查找4字节整数的4字节。它以十六进制形式运行,就像从2020年开始查找[2,0,2,0]一样


它的方法是移位位,并使用所有1的掩码和。

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

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

代码采用文件大小中较低的4个字节(
unsigned long
可能是4或8个字节,具体取决于平台/编译器),并将这4个字节存储到中的
buf
数组中


它取
fileSize
的最低8位并将其存储到
buf[0]
,然后取下一个最低8位并将其存储到
buf[1]
,依此类推,对于
buf[2]
buf[3]
,代码取文件大小的较低4个字节(
unsigned long
可能是4或8个字节,具体取决于平台/编译器),并且正在将这4个单独的字节存储到中的
buf
数组中


它将
fileSize
中最低的8位存储到
buf[0]
,然后将下一个最低的8位存储到
buf[1]
,依此类推
buf[2]
buf[3]
假设您想将十进制数8375拆分为数字。您可以这样做:

   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;  
   
嗯,你发布的代码就是这么做的。只不过它将数字拆分为八位字节,即十六进制数字对。也就是说,每个八位字节可以取[0..255]范围内的值

发布的代码使用位操作:
(a>>8)
实际上是
(a/256)
(a&0xFF)
(a%256)
,假设您想将十进制数8375拆分为数字。您可以这样做:

   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;  
   
嗯,你发布的代码就是这么做的。只不过它将数字拆分为八位字节,即十六进制数字对。也就是说,每个八位字节可以取[0..255]范围内的值

发布的代码使用位操作:
(a>>8)
实际上是
(a/256)
,而
(a&0xFF)
(a%256)
,在little endian系统上,它与:

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


在little endian系统上,它与以下相同:

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


你不懂吗?你不熟悉位移位吗?你不熟悉位运算吗?你不懂吗?你不熟悉位移位吗?你不熟悉位运算吗?你不懂吗?你不熟悉位移位吗?你不熟悉位运算吗?你不懂吗?你不熟悉位转换吗?请更具体地回答你的问题。/s 4字节整数的4位?好的使用>>运算符指定位数,但内存是以字节/s 4位的4字节整数寻址的?您可以使用>>运算符指定位数,但内存是以字节寻址的。使用
无符号
,说明性代码会更接近。
int
a>>8
a不同/256
a&0xFF
不是
a%256
a<0
@chux,对,谢谢!如果使用
无符号
,说明性代码会更接近。如果使用
int
a>8
a/256
不同,
a&0xFF
a<0>时不是
a%256
@chux,好的,谢谢!先生如何知道执行该语句的次数我们可以使用表达式
sizeof(unsigned long)
来确定
unsigned long
.byte buf[sizeof(unsigned long)];for(int i=0;i>(8*i))&0xff;}注意,上面的代码假设一个
字节
由8位组成。如果我们想让它也通用,我们可以使用
CHAR\u BIT
clmiits
中的\UCHAR\u MAX`。
CHAR\u BIT
定义了
CHAR
类型中的位数,
UCHAR\u MAX
给出了的最大值e> sir如何知道执行该语句的次数我们可以使用表达式
sizeof(unsigned long)
来确定
unsigned long
使用的字节数。byte buf[sizeof(unsigned long)];for(int i=0;i(8*i))&0xff;}注意,上面的代码假设一个
字节
由8位组成。如果我们想让它也通用,我们可以使用
CHAR\u BIT
clmiits
中的\UCHAR\u MAX`。
CHAR\u BIT
定义了
CHAR
类型中的位数,
UCHAR\u MAX
给出了的最大值e> 无符号字符