[英]On a little-endian machine, how will bit operators work?
我有以下代码从文件中获取像素值。 我在运行OS X的Intel Macbook上。我相信这是低端的。 我使用以下代码来确定是否在像素上设置了最低有效位。 它可以编译并运行,但是我不确定通过操作是否真的能给我正确的数据。
typedef struct {
unsigned char blue;
unsigned char green;
unsigned char red;
} pixel_t;
pixel_t *pixels = malloc(((bmp->dib.bmp_bytesz/3)+1) * sizeof(*pixels));
printf("%u", (pixels[i].red & 0x01));
printf("%u", (pixels[i].green & 0x01));
printf("%u", (pixels[i].blue & 0x01));
小尾数法和大尾数法指的是以较大单位(例如short
或int
)为单位的字节顺序(本身不是位)。
按位运算是相同的; 这些操作为您提供了pixels[i].blue
等数字的最低有效位。如果它们存储在char
(或unsigned char
或signed char
)中,则没有问题。 如果将它们存储在int
或short
或某种形式中,则根据机器是big-endian还是little-endian而定,要寻址的字节将有所不同,但这仍然是平台上数字的最低有效位。
内在性是影响值存储方式的内部细节。 它对如何计算值没有影响。
乔纳森(Jonathan)已经有了正确的答案...只是添加一个例子。
字节序描述了多字节数据如何存储在计算机内存中。 它描述了内存中地址的最高有效字节(MSB)和最低有效字节(LSB)的位置。 大字节序:先存储MSB,即从左到右小字节序:先存储LSB,即从右到左。
示例:0x04030201如何存储在内存中?
Address BE LE
00000000 04 01
00000001 03 02
00000002 02 03
00000003 01 04
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.