2016-11-27 2 views
2

Je voudrais prendre un int, et le convertir en uint8_t tableau de nombres hexadécimaux? L'int est au maximum de 8 octets dans HEX après conversion. Je suis en mesure d'utiliser une méthode qui convertit un int (19604) dans un tableau uint8_t comme ceci:Conversion d'un int en un tableau uint8_t Valeur HEX

00-00-00-00-00-00-00-00-04-0C-09-04 

Mais j'ai besoin de ressembler à ceci:

00-00-00-00-00-00-00-00-00-00-4C-94 

L'algorithme I utilisé était cette :

void convert_file_size_to_hex(long int size) 
{ 
    size_t wr_len = 12; 
    long int decimalNumber, quotient; 
    int i=wr_len, temp; 

    decimalNumber = size; 
    quotient = decimalNumber; 
    uint8_t hexNum[wr_len]; 
    memset(hexNum, 0, sizeof(hexNum)); 

    while(quotient != 0) { 
     temp = quotient % 16; 
     hexNum[--i] = temp; 
     quotient /= 16; 
} 

Comment puis-je faire cela? Dois-je utiliser un algorithme différent ou devrais-je essayer de décaler le résultat? Je suis un peu nouveau pour changer de couleur en C, donc une aide serait géniale. Je vous remercie!

Répondre

0

Consultez le code suivant:

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

int main() 
{ 
    unsigned char hexBuffer[100]={0}; 
    int n=19604; 
    int i; 

    memcpy((char*)hexBuffer,(char*)&n,sizeof(int)); 

    for(i=0;i<4;i++) 
     printf("%02X ",hexBuffer[i]); 

    printf("\n"); 

    return 0; 
} 

Utilisez simplement, une déclaration simple pour convertir int en tampon d'octets

memcpy((char*)hexBuffer,(char*)&n,sizeof(int)); 

Vous pouvez utiliser 8 au lieu de 4 en imprimer la boucle

+0

+1 Je pensais que c'était la façon la plus simple et la plus directe de le faire sans utiliser d'algorithmes et de types de données personnalisés. Je vous remercie! –

1

Puisque n % 16 a une plage de 0..15 inclusivement, vous créez un tableau de chiffres hexadécimaux à partir de votre numéro. Si vous souhaitez faire un tableau d'octets, utilisez 256 à la place:

while(quotient != 0) { 
    temp = quotient % 256; 
    hexNum[--i] = temp; 
    quotient /= 256; 
} 

Vous pouvez réécrire la même chose avec décalages de bits et masquage de bits:

while(quotient != 0) { 
    temp = quotient & 0xFF; 
    hexNum[--i] = temp; 
    quotient >>= 8; 
} 

Pour savoir combien d'octets dont vous avez besoin, peu importe le système, utilisez sizeof(int):

size_t wr_len = sizeof(int); 
0

Utilisez un syndicat pour cette

union int_to_bytes { 
     int i; 
     uint8_t b[sizeof(int)]; 
}; 

union int_to_bytes test = { .i = 19604 }; 

int i = sizeof(test.b); // Little-Endian 
while (i--) 
     printf("%hhx ", test.b[i]); // 0 0 4c 94 

putchar('\n');