Convert C++ byte array to a C string

前端 未结 3 432
北海茫月
北海茫月 2021-01-24 01:34

I\'m trying to convert a byte array to a string in C but I can\'t quite figure it out.

I have an example of what works for me in C++ but I need to convert it to C.

相关标签:
3条回答
  • 2021-01-24 02:20

    C strings are null terminated, so the size of the string will be the size of the array plus one, for the null terminator. Then you could use memcpy() to copy the string, like this:

    #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;
    }
    

    Output:

    Hello

    Run it online

    0 讨论(0)
  • 2021-01-24 02:27

    Strings in C are byte arrays which are zero-terminated. So all you need to do is copy the array into a new buffer with sufficient space for a trailing zero byte:

    #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);
    }
    
    0 讨论(0)
  • 2021-01-24 02:29

    Here is a demonstrative program that shows how it can be done.

    #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;
    }
    

    The program output is

    Hello
    

    Pay attention to that the character array is zero initialized. Otherwise after the call of memcpy you have to append the terminating zero "manually".

    s[sizeof( s ) - 1] = '\0';
    

    or

    s[sizeof( byteArray )] = '\0';
    

    The last variant should be used when the size of the character array much greater than the size of byteArray.

    0 讨论(0)
提交回复
热议问题