如何将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)
答案 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]);
}
}