从内存中获取n个字节

时间:2011-11-17 11:22:18

标签: c

假设我有一个指向图像数据的指针,它有3个通道(RGB),每个通道8位,我想显示像#000000这样的像素值,它是一个24位数字。数据存储为RGB RGB RGB ...所以我真的需要读取前三个字节。

typedef unsigned char uchar;
uchar* data = get_image_data_somehow();

也许它比我想象的容易,但如果我有四个字节,我可以做类似

的事情
uint32 value = *((uint32*) data);
printf("Value is %x", value);

怎么做?原则上我需要32位,并用0填充前8位。

3 个答案:

答案 0 :(得分:4)

您可以向右移位8位来实现此目的。

uint32_t value = *((uint32_t*) data) >> 8;
printf("Value is %0X", value);

data是值为#1177ff的两个像素的示例:

data       = 11 77 ff 11 77 ff
value      = 11 77 ff 11
value >> 8 = 00 11 77 ff

答案 1 :(得分:0)

memcpy( &value, data, 3 );
value &= 0x00FFFFFF;

(假设您使用的是Little-Endian机器)

答案 2 :(得分:0)

您可以使用 union 来提取数据,或将其部门化。

看起来像这样:

union myRGB {
    unsigned int data;
    struct RGB
    {
       unsigned char a, b, g, r;
    }
}

myRGB value = *((uint32*) data);

printf("R Value is %x", value.RGB.a);

<强> RGB parsing example