C 192位数组到4个24char数组的数组

问题描述

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

#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更有意义的名称。

实际上“完成工作”的那句话很直截了当:我从源数组中获取一位,将其移至当前char内的正确位置,然后更新目标数组。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...