将long char数组转换为byte数组

时间:2011-01-26 16:46:49

标签: c arrays char

如何将char数组转换为字节数组? 例如:

char *digit="3224833640520308023"//long long array 

转换为:

uint8_t buff[256]= {0x2c, 0xc0, 0xe9, 0x1c, 0x32, 0xf1, 0x55, 0x37, 0};

(2c c0 e9 1c 32 f1 55 37)

2 个答案:

答案 0 :(得分:1)

我最后以相反的顺序打印。如果您需要以该字节序排列的数组,则可能需要以字节序交换。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char *digit="3224833640520308023";

int  main() {
  int i;
  unsigned char byteArray[16];
  unsigned long long x = strtoull(digit,0,10);

  printf("%llx\n",x);
  printf("%llu\n",x);
  for (i=0;i<8;i++) {
    byteArray[i] = (x>>(i*8)) & 0xFF;
  }

  printf ("Array is:\n");
  for (i=7;i>=0;i--) {
    printf("%2.2x ",byteArray[i]);
  }
  return 0;
}

答案 1 :(得分:0)

strtoull将字符串转换为64位内部表示。

如果您的平台需要,

htobe64会将字节序切换为大端(您在示例中使用的字节序)。

然后,您可以将此大端64位变量中的8个字节复制到字节数组中。

#include <stdint.h>
#include <endian.h>
#include <stdio.h>
#include <string.h>

char *digit="3224833640520308023";

main ()
{
    uint64_t ull;
    uint64_t beull;
    uint8_t buff[8];
    int i;

    ull=strtoull(digit,0,10);
    beull=htobe64(ull);
    memcpy(buff,&beull,8);
    for(i=0;i<8;i++)
    {
        printf("%02x\n",buff[i]);
    }
}