2016-11-27 2 views
2

Я хотел бы взять int и преобразовать его в массив uint8_t шестнадцатеричных чисел? После преобразования значение int равно 8 байтам в HEX. Я был в состоянии использовать метод, который преобразует INT (19604) в массив uint8_t, как это:Преобразование int в uint8_t массив Значение HEX

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

Но мне нужно, чтобы выглядеть следующим образом:

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

алгоритм я использовал этот :

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; 
} 

Как я могу это сделать? Должен ли я использовать другой алгоритм или я должен попытаться сдвинуть результат? Я немного новичок, чтобы немного переместиться на C, поэтому какая-то помощь будет отличной. Спасибо!

ответ

0

Рассмотрим следующий код:

#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; 
} 

Используйте только простое заявление, чтобы преобразовать Int в байт буфера

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

Вы можете использовать 8 вместо 4, а печать Петля

+0

+1 Я думал, что это самый простой и прямой способ сделать это без использования каких-либо алгоритмов и пользовательских типов данных. Спасибо! –

1

С n % 16 имеет диапазон 0..15 включительно, вы делаете массив из шести цифр с вашего номера. Если вы хотите, чтобы массив байт, используйте 256 вместо:

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

Вы можете переписать то же самое с битовыми сдвигами и битным маскирования:

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

Чтобы знать, сколько байт вам нужно независимо от того, система, используйте sizeof(int):

size_t wr_len = sizeof(int); 
0

Используйте объединение для этого

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'); 
Смежные вопросы