簡體   English   中英

從內存中獲取n個字節

[英]Fetching n bytes from memory

假設我有一個指向具有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位1,並用零填充前8位。

您可以右移8位以達到此目的。

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

data為值#1177ff兩個像素的#1177ff

data       = 11 77 ff 11 77 ff
value      = 11 77 ff 11
value >> 8 = 00 11 77 ff
memcpy( &value, data, 3 );
value &= 0x00FFFFFF;

(假設您使用的是Little-Endian機器)

您可以使用聯合來提取數據或將其部門化。

它看起來像這樣:

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解析示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM