簡體   English   中英

將C ++字節數組轉換為C字符串

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM