c++ - 如何在 cpp 中将 uint8_t[][] 转换为 char[]

标签 c++

<分区>

我必须将 uint8_t[][] 生成的数字转换为简单的 char[]。如何将 uint8_t[][] 数字转换为 char key[]。我已将数字转换为字符并希望存储到数据库中。

static const uint8_t blake2s_kat[BLAKE2_KAT_LENGTH][BLAKE2_KAT_LENGTH] = 
{
{
    0x69, 0x21, 0x7A, 0x30, 0x79, 0x90, 0x80, 0x94,
    0xE1, 0x11, 0x21, 0xD0, 0x42, 0x35, 0x4A, 0x7C,
    0x1F, 0x55, 0xB6, 0x48, 0x2C, 0xA1, 0xA5, 0x1E,
    0x1B, 0x25, 0x0D, 0xFD, 0x1E, 0xD0, 0xEE, 0xF9
},
{
    0xE3, 0x4D, 0x74, 0xDB, 0xAF, 0x4F, 0xF4, 0xC6,
    0xAB, 0xD8, 0x71, 0xCC, 0x22, 0x04, 0x51, 0xD2,
    0xEA, 0x26, 0x48, 0x84, 0x6C, 0x77, 0x57, 0xFB,
    0xAA, 0xC8, 0x2F, 0xE5, 0x1A, 0xD6, 0x4B, 0xEA
},....};

例如

  somenumber = blake2s_kat;
 char key[100] = some function to convert into char(somenumber);

最佳答案

你问的有问题,因为二维数组不是一维数组。

如果一个细胞就像一个房间
那么一维数组就像一个充满房间的走廊
二维数组就像一座布满走廊的建筑物
你不能只是把一座建筑改造成走廊。

你可以做的是将 uint8_t[] 的每个子数组转换为 char*:

auto pointer = reinterpret_cast<char*>(blake2s_kat[SOME_INDEX]);

blake2s_kat[SOME_INDEX]衰减uint8_t*,然后可以转换为char*

另外,您的示例中的每个子数组似乎只包含 8x4 数字,而不是 100。确保您考虑了数组的大小。

另一种可能性是使用memcpy:

char buffer[8x4]; 
memcpy(buffer, blake2s_kat[SOME_INDEX], 8x4);

关于c++ - 如何在 cpp 中将 uint8_t[][] 转换为 char[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43089088/

相关文章:

c++ - 指针混淆c++

c++ - 如何打印出 DECIMAL (tagDEC) 类型的值?

c++ - 为什么我在使用++ 时出现段错误,但在使用 '1 +' 时却没有?

c++ - 提供指向成员本身的成员指针

c++ - 接口(interface)->抽象->具体类设计中的虚解构函数

c++ - 在 Xcode 5.1 中从虚幻引擎 4 编译 C++ 时出现代码签名错误

c++ - 异常是否需要虚拟继承?

c++ - g++ (cygwin) 中的多重声明错误

c++ - C++ std::string 的 NRVO

无需在 VS 2013 中包含指令 "math.h"即可使用 C++ 数学函数