/ / Konwertowanie długiej tablicy znaków liczby na tablicę bajtów - c, tablice, znak

Konwertowanie długich tablic znaków na tablicę bajtów - c, tablice, char

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 № 1

W 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]);
}
}