Jak przekonwertować tablicę znaków liczby na tablicę bajtów? Przykład:
char *digit="3224833640520308023"//long long array
Konwertuj na:
uint8_t buff[256]= {0x2c, 0xc0, 0xe9, 0x1c, 0x32, 0xf1, 0x55, 0x37, 0};
(2c c0 e9 1c 32 f1 55 37)
Odpowiedzi:
1 dla odpowiedzi № 1W końcu wydrukowałem w odwrotnej kolejności. Możesz wymienić endian, jeśli potrzebujesz tablicy w tej kolejności endian.
#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("%llxn",x);
printf("%llun",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;
}
0 dla odpowiedzi nr 2
strtoull konwertuje ciąg na wewnętrzną 64-bitową reprezentację.
htobe64 przełączy endianness na big endian (ten, którego użyłeś w przykładzie), jeśli to konieczne na twojej platformie.
Następnie możesz skopiować 8 bajtów z tej dużej 64-bitowej zmiennej endian do tablicy bajtów.
#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("%02xn",buff[i]);
}
}