C++ 谁能给我解释一下这个功能,我不懂
谁能给我解释一下这段代码吗?假设一个文件的大小是你选择的这只是在寻找一个4字节整数的4字节。它以十六进制形式运行,就像从2020年开始查找[2,0,2,0]一样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位。为
它的方法是通过移位位,并使用所有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> 无符号字符
。