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

时间:2017-03-29 09:07:27

标签: c++

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

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
},....};

e.g。

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

1 个答案:

答案 0 :(得分:1)

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

如果一个牢房就像一个房间
那么一维阵列就像一个带有房间的走廊 一个二维阵列就像一个人行道上的建筑物 你不能只是把建筑物转换成走廊。

您可以做的是将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);