[英]Convert C++ byte array to a C string
我正在尝试将字节数组转换为C语言中的字符串,但我不太清楚。
我有一个在C ++中对我有用的示例,但我需要将其转换为C。
C ++代码如下:
#include <iostream>
#include <string>
typedef unsigned char BYTE;
int main(int argc, char *argv[])
{
BYTE byteArray[5] = { 0x48, 0x65, 0x6C, 0x6C, 0x6F };
std::string s(reinterpret_cast<char*>(byteArray), sizeof(byteArray));
std::cout << s << std::endl;
return EXIT_SUCCESS;
}
谁能指出我正确的方向?
C 中的字符串是零结尾的字节数组。 因此,您需要做的就是将数组复制到一个新的缓冲区中,该缓冲区具有足够的空间用于尾随零字节:
#include <string.h>
#include <stdio.h>
typedef unsigned char BYTE;
int main() {
BYTE byteArray[5] = { 0x48, 0x65, 0x6C, 0x6C, 0x6F };
char str[(sizeof byteArray) + 1];
memcpy(str, byteArray, sizeof byteArray);
str[sizeof byteArray] = 0; // Null termination.
printf("%s\n", str);
}
C字符串以null终止,因此字符串的大小将是数组的大小加1(对于null终止符)。 然后,您可以使用memcpy()
复制字符串,如下所示:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef unsigned char BYTE;
int main(void)
{
BYTE byteArray[5] = { 0x48, 0x65, 0x6C, 0x6C, 0x6F };
// +1 for the NULL terminator
char str[sizeof(byteArray) + 1];
// Copy contents
memcpy(str, byteArray, sizeof(byteArray));
// Append NULL terminator
str[sizeof(byteArray)] = '\0';
printf("%s\n", str);
return EXIT_SUCCESS;
}
输出:
你好
这是一个演示程序,显示了如何完成它。
#include <stdio.h>
#include <string.h>
typedef unsigned char BYTE;
int main(void)
{
BYTE byteArray[5] = { 0x48, 0x65, 0x6C, 0x6C, 0x6F };
char s[sizeof( byteArray ) + sizeof( ( char )'\0' )] = { '\0' };
memcpy( s, byteArray, sizeof( byteArray ) );
puts( s );
return 0;
}
程序输出为
Hello
请注意,字符数组初始化为零。 否则,在调用memcpy之后,您必须“手动”添加终止零。
s[sizeof( s ) - 1] = '\0';
要么
s[sizeof( byteArray )] = '\0';
当字符数组的大小远大于byteArray的大小时,应使用最后一个变体。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.