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 范围内(含),以便在位屏蔽期间不会发生数据丢失。
我有四个整数,我需要将它们转换成一个无符号的 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 范围内(含),以便在位屏蔽期间不会发生数据丢失。