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
更有意义的名称。
实际“完成工作”的行非常简单:我从源数组中取出一位,将其移动到当前字符中的正确位置并更新目标数组。
我想在以下格式之间进行转换:
#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
更有意义的名称。
实际“完成工作”的行非常简单:我从源数组中取出一位,将其移动到当前字符中的正确位置并更新目标数组。