2016-11-27 330 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');