我必须实现一个将字节写入ostream
对象的方法。我们刚刚调用了这个ostream
对象strobj
。我还有一个缓冲区用于存储一个字节的数据,让我们称之为:
char &bitter;
在我的标题文件中,我有这个:
void writeThisByte(int sumInt);
指令说我必须写入传递给ostream
对象的int的“不太重要的字节”,即strobj
;
但是,我对最不重要的字节意味着什么感到困惑。
这是否意味着您正在检查是否sumInt == 1
?如果是的话,你会把它写成这样的ostream
吗?
strobj.write(&bitter, 1);
我不确定:(
答案 0 :(得分:14)
想象一个32位整数,其中每个位可以是0或1,例如:
011101010101010101010101010110110
^^^^^^^^
最低有效字节是右侧的8位。
如果您采用小数示例,可能更容易理解:给定数字291023,“3”是最不重要的数字,因为如果您更改它,则对总数的影响最小。
要获得最低有效字节,只需按位-AND较大的int
,其中0xFF十六进制或255十进制(1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 = 255) - 这将清除输出所有更重要的位并保留8个最低有效位...
int x = ...whatever...;
unsigned char least_significant_bits = x & 255;
效果是这样的:
011101010101010101010101010110110 // x
000000000000000000000000011111111 //255
result:
000000000000000000000000010110110 // x & 255
答案 1 :(得分:10)
您的int
由几个字节组成(最可能是2,4或8个字节)。与最低有效位的概念类似,最低有效字节是整个整数值中权重较小的字节。根据系统的字节顺序,它可能是内存方面的第一个或最后一个字节。
要提取最低有效字节,按位-AND数字,其中一个字节的值为1
s,i。即255:
int LSB = (someInteger & 0xFF);
答案 2 :(得分:4)
int
的更重要的位是对其值有更大贡献的位。最低有效位贡献较少。您通常可以通过使用255
(包含所有1
s的字节)的整数来获取这些值
int lsb;
lsb = SumInt & 255;
答案 3 :(得分:4)
当您查看十进制数字时,例如507,最不重要的数字将是7.将其更改为6或8会改变总数远小于改变5。
当您查看日期,例如 2013年5月14日时,最不重要的部分是按时间顺序排列的第(14)天。< / p>
当您查看无符号的32位int(4个字节)时,其中4个字节(256^3)*b3 + (256^2)*b2 + 256*b1 + b0
的整数值为b0, b1, b2, b3
,最不重要< / em> byte是字节b0
。
您可以像其他人建议的那样int sumInt
从char c = sumInt & 0xFF;
获取最不重要的字节。