c++ 如何将四个 8 位整数存储为 32 位无符号整数?

c++ how to store four 8 bit integers as a 32 bit unsigned integer?

我有四个整数,我需要将它们转换成一个无符号的 32 位整数。我正在将 HDR 图像转换为 LDR 输出图像数据。

你有四个 8 位整数,你想将它们组合成一个 32 位整数。这样做的方法是使用位移位,例如:

uint8_t ui1, ui2, ui3, ui4;

// set values to ui1..ui4 as neeed...

uint32_t ui32 = (uint32_t(ui1) << 24) | (uint32_t(ui2) << 16) | (uint32_t(ui3) << 8) | uint32_t(ui4);

// use ui32 as needed...

或者,如果您需要反转 ui32 的字节序,请更改 ui1..ui4 的顺序:

uint32_t ui32 = (uint32_t(ui4) << 24) | (uint32_t(ui3) << 16) | (uint32_t(ui2) << 8) | uint32_t(ui1);

更新: 鉴于您的评论:

Would this work if I have expressed the numbers as normal "int" ?

是的,这也适用于那种情况。您只需要添加一些位掩码以确保每个 int 值不超过 8 位,例如:

int i1, i2, i3, i4;

// set values to i1..i4 as neeed...

uint32_t ui32 = (uint32_t(i1 & 0xFF) << 24) | (uint32_t(i2 & 0xFF) << 16) | (uint32_t(i3 & 0xFF) << 8) | uint32_t(i4 & 0xFF);

// use ui32 as needed...

确保 int 值在 0..255 范围内(含),以便在位屏蔽期间不会发生数据丢失。