如何将无符号字符数组转换为C中的字符串?

如果我有这样的数组

unsigned char data[2850] = ""; 

在运行我的程序的一部分之后,最终会充满字节元素,这样如果我遍历它并将其记录下来,我会看到以下内容

  for (size_t i= 0; i < sizeof(data); i++) { printf("%02X ", data[i]); } //log window shows 01 24 81 00 0E 1C 44 etc... 

有没有办法获取数据数组的所有元素并将它们放入const char? 或者只是一个大字符串? 希望我足够清楚。 我的目标是最终将此数据数组的所有元素转换为base64编码的字符串,我可以在程序中的其他位置使用。

C中的字符串(char数组)是由sentianal字符终止的char的顺序序列(空终止符: '\0'

这意味着如果在数组中的任何位置都有一个值为0x00的字节,那么它可能会在序列结束之前终止“字符串”。 在您的示例中,如果您将data数组转换为字符串,则它的结尾将是第一个元素:

 data[]{00, EB, 23, EC, FF, etc... }; 

现在,如果你想在这里用数据的值创建一个字符串,你可以用sprintf()来做,例如:

 unsigned char val = 00; data[0] = val; char dump[5] = {0}; sprintf(dump, "%02x", data[0]); 

现在你有一个值为“00”的字符串,你可以使用以下内容来表达它:

 sprintf(dump, "0x%02x", data[0]); 

因此它具有“0x00”以将其显示为hex数据。

你可以循环这样的东西来提供完整的字符串……但是请记住,可打印的字符串需要至少是数据字符串大小的2x + 1(ASCII为2x,null为+1),并且你有按步骤填充新字符串。 例:

 unsigned char data[5] = {0x00, 0x12, 0xB3, 0xFF, 0xF0}; char printstr[11] = {00}; for(int x = 0; x < 5; x++) sprintf(printstr+(x*2), "%02x", data[x]); printstr[10] = '\0'; 

现在printstr"0012b3fff0"

你可以使用sprintf(注意如果你sprintf超过’str’数组的末尾,你将有一个缓冲区溢出):

 //malloc 2 chars for each byte of data (for 2 hex digits) char *str = malloc(sizeof(char) * 3 * (sizeof(data) + 1)); //this var will point to the current location in the output string char *strp = str; if (NULL == str) { return false; //memory error } for (size_t i= 0; i < sizeof(data); i++) { snprintf(strp, 2, "%02X ", data[i]); strp++; } // now the memory in *str holds your hex string! 

这很容易变量测试是数据类型char或unsigned char

 std::string User_re((char*)test);