将int转换为uint8_t数组HEX值

时间:2016-11-27 10:16:37

标签: c arrays hex bit-shift

我想要一个int,并将其转换为uint8_t十六进制数组?转换后,HE在HEX中最多为8个字节。我能够使用一个方法将int(19604)转换为uint8_t数组,如下所示:

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中的位移有点新意,所以一些帮助会很棒。谢谢!

3 个答案:

答案 0 :(得分:1)

由于n % 16的范围为0..15(包括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);

答案 1 :(得分: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

答案 2 :(得分: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');