1

我有以下代码从文件中获取像素值。我在运行 OS X 的 Intel macbook 上。我相信那是 little-endian。我有以下代码用于确定像素上是否设置了最低有效位。它编译并运行,但我不确定操作是否真的给了我正确的数据。

 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));
4

3 回答 3

7

shortLittle-endian 和 big-endian 指的是较大单位(如or )中的字节顺序(不是比特本身int)。

位运算是一样的;这些操作为您提供了pixels[i].blueetc 中数字的最低有效位。如果它们存储在char(or unsigned charor signed char) 中,则没有问题。如果它们存储在intorshort或什么东西中,那么被寻址的字节将根据机器是大端还是小端而有所不同,但它仍然是平台上数字的最低有效位。

于 2013-07-18T05:03:51.643 回答
5

Endianess 是影响值存储方式的内部细节。它对值的计算方式没有影响。

于 2013-07-18T05:04:06.147 回答
2

乔纳森已经有了正确的答案......只是添加一个例子。

字节序描述了多字节数据如何存储在计算机内存中。它描述了内存中地址的最高有效字节 (MSB) 和最低有效字节 (LSB) 的位置。Big Endian:先存储 MSB,即从左到右 Little Endian:先存储 LSB,即从右到左。

示例:0x04030201 是如何存储在内存中的?

Address     BE  LE
00000000    04  01
00000001    03  02
00000002    02  03
00000003    01  04
于 2013-07-18T05:18:22.880 回答