2016-11-27 329 views
2

我想採取一個整數,並將其轉換爲uint8_t數組的十六進制數?轉換後,整數在HEX中最長爲8個字節。我能夠使用一個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');