[英]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.