如何在 cpp 中将 uint8_t[][] 转换为字符 []

How to convert uint8_t[][] to char[] in cpp

本文关键字:转换 字符 cpp 中将 uint8      更新时间:2023-10-16

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

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);