192 bitsets 到 4 24char 数组的 C++ 数组

C++ array of 192 bitsets to 4 24char array

我想在以下格式之间进行转换:

#include <bitset>

std::bitset<4> input[192]; // (4 * 192 bits = 768 bits)

char output[4][24];        // (4 * 24 bytes = 768 bits)

具体来说,我想将 bitset 中的四位中的每一位转换为分隔的 char[24] 数组。

怎么做最简单最快?

我会简单地使用嵌套 for 循环:

constexpr int kSize1 = 4;
constexpr int kSize2 = 24;
constexpr int kBitsPerChar = 8;

void convert(std::array<std::bitset<kSize1>, kSize2 *  kBitsPerChar> &input,
             std::array<std::array<char, kSize2>, kSize1> &output)
{
    for (int i = 0; i < kSize1; ++i)
    {
        for (int j = 0; j < kSize2; ++j)
        {
            char &c = output[i][j];
            c = 0;
            for (int bit = 0; bit < kBitsPerChar; ++bit)
            {
                c |= input[j * kBitsPerChar + bit][i] << bit;
            }
        }
    }
}


我为使其相当安全所做的工作是为所有维度定义常量,我在数组声明和 for 循环中都使用了这些常量。根据您的上下文,您应该选择比 kSize1 更有意义的名称。

实际“完成工作”的行非常简单:我从源数组中取出一位,将其移动到当前字符中的正确位置并更新目标数组。