1
7
另一种方法是,只有当您可以单独读取一个项目的组件时,才应用结束符,因为您通常可以独立地从内存中读取32位int的单个字节,如果您想将这些字节解释为32位int,则不必确保架构的结束符考虑在内。在。 通常情况下,你不能从存储器中读取一个字节的单个位,因此就存储器结构而言,实际上没有“位端序”的概念(我确信在硬件级,但在软件级你看不到)。可能需要处理(或至少要注意)位端性的几个方面:
|
2
7
endianness只适用于字节顺序,而不是位顺序。位的顺序在相应的字节内是相同的。 |
3
3
是的,它们是一样的。 字节内的位排序通常只在进行逐位I/O时才是一个问题,例如在读取通过串行线路发送的数据流时。它们一次只发送一个比特,所以发送方和接收方需要就每个字节的比特是从左到右还是从右到左发送达成一致。 对于文件和内存访问,字节内的位顺序不变。 |
4
1
有点混乱。除串行通信外,“第一位”一词没有意义,只有最左(最重要)和最右(最不重要)位。如果有人告诉你提取“前三位”,那么打他们一巴掌,问他们什么意思。即使术语“位0”是不明确的,它通常意味着最低有效位、最右边的位(2**0位),但在某些位字段中,它几乎同样常用于表示最高有效位、最左边的位。哪个位是字节中的“第一”位完全取决于您对这些位所做的操作。 |
5
1
C中的位运算符被定义为
价值观
. 表达式
|
6
1
当一个字段使用一个字节的一部分,或者跨越一个字节的开始或结束(或两者)的字节时,位顺序很重要。 示例:2个字节的数据first 235(decimal)second 173(decimal),aka hex eb和ad。 我想要一个位域,从第四位开始,到第十二位。所以,跳过3位,从接下来的9位中得到9位无符号整数。 我声称有4种可能的结果: byteOrder, bitOrder * bigEndian, bigEndian results in hex 0BA or decimal 186 * littleEndian, littleEndian results in hex 1BD or decimal 445 * littleEndian, bigEndian results in hex 05D or decimal 93 * bigEndian, littleEndian results in hex 1DE or decimal 478 我在数据中看到了这4个中的前3个。大,大,小,小都很容易解决。 提示处理此问题。 如果字节顺序是big-endian,则从左到右写下字节。 如果字节顺序为little endian,则从右到左写下字节。 |
no one special · 32位整数缩放,无溢出 6 年前 |
Benn Tan · 比特操作:更难翻动硬币 6 年前 |
Ganesh Thampi · 使用位运算符将十进制转换为二进制 6 年前 |
Ganesh Thampi · 使用位的奇偶程序 6 年前 |
datapanda · 三维网格的莫顿反向编码 6 年前 |
rubyquartz · 交换无符号短整数的字节 6 年前 |
John Proctor · C中位的掩蔽范围 6 年前 |
Areg Sarvazyan · 从无符号int中提取位的函数 6 年前 |
user9505617 · 按位异或0xFFFFFFFF? 6 年前 |