假设我有一个指向图像数据的指针,它有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位。
答案 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 强>