Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将int转换为uint8\u t数组十六进制值_C_Arrays_Hex_Bit Shift - Fatal编程技术网

C 将int转换为uint8\u t数组十六进制值

C 将int转换为uint8\u t数组十六进制值,c,arrays,hex,bit-shift,C,Arrays,Hex,Bit Shift,我想取一个int,然后把它转换成十六进制数的uint8\t数组?转换后,int的十六进制最大长度为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 但我需要它看起来像这样: 00-00-00-00-00-00-00-00-04-0C-09-04 00-00-00-00-00-00-00-00-00-00-4C-9

我想取一个int,然后把它转换成十六进制数的uint8\t数组?转换后,int的十六进制最大长度为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
但我需要它看起来像这样:

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语言中的位转换有点陌生,所以需要一些帮助。谢谢大家!

由于
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)


考虑以下代码:

#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;
}
打印循环时,可以使用8而不是4

联合整数到字节{
int i;
uint8_t b[sizeof(int)];
};
union int_to_bytes test={.i=19604};
int i=sizeof(test.b);//小恩迪亚
而(我--)
printf(“%hhx”,test.b[i]);//0 4c 94
putchar('\n');

+1我认为这是不使用任何算法和自定义数据类型的最简单、最直接的方法。非常感谢。