繁体   English   中英

如何将unsigned int转换为unsigned char数组

[英]How convert unsigned int to unsigned char array

我只需要使用按位和运算符提取这些字节。 0xFF是一个十六进制掩码,用于提取一个字节。 对于2个字节,此代码正常工作:

#include <stdio.h>

int main()
{
    unsigned int i = 0x7ee;
    unsigned char c[2];

    c[0] = i & 0xFF;
    c[1] = (i>>8) & 0xFF;

    printf("c[0] = %x \n", c[0]);
    printf("c[1] = %x \n", c[1]);


    return 0;
}

输出:

c[0] = ee;
c[1] = 7;

我应该怎么做4个字节才能正常工作?

unsigned int i = 0x557e89f3;
unsigned char c[4];

我的代码:

unsigned char c[4];
         c[0] = i & 0xFF;
         c[1] = (i>>8) & 0xFF;
         c[2] = (i>>16) & 0xFF;
         c[3] = (i>>24) & 0xFF;
         printf("c[0] = %x \n", c[0]);
         printf("c[1] = %x \n", c[1]);
         printf("c[2] = %x \n", c[2]);
         printf("c[3] = %x \n", c[3]);
#include <stdio.h>

int main()
{
    unsigned int i = 0x557e89f3;
    unsigned char c[4];

    c[0] = i & 0xFF;
    c[1] = (i>>8) & 0xFF;
    c[2] = (i>>16) & 0xFF;
    c[3] = (i>>24) & 0xFF;

    printf("c[0] = %x \n", c[0]);
    printf("c[1] = %x \n", c[1]);
    printf("c[2] = %x \n", c[2]);
    printf("c[3] = %x \n", c[3]);


    return 0;
}

首先。 C标准不保证'unsigned int'是32位长。 为了确保它,你应该使用stdint.h头文件中定义的uint32_t类型(C99)。 但是,此类型的实施不是强制性的。 其他解决方案是使用'unsigned long',保证至少有32位。所以解决方案应该是:

#include <stdio.h>

int main()

{
    unsigned long int i = 0x557e89f3UL;
    unsigned char c[4];

    c[0] = i & 0xFF;
    c[1] = (i>>8) & 0xFF;
    c[2] = (i>>16) & 0xFF;
    c[3] = (i>>24) & 0xFF;

    printf("c[0] = %x \n", c[0]);
    printf("c[1] = %x \n", c[1]);
    printf("c[2] = %x \n", c[2]);
    printf("c[3] = %x \n", c[3]);


    return 0;
}

您可以简单地将int*char* 如果需要单独数组中的字节,则复制它们。

#include <algorithm>
#include <iomanip>
#include <iostream>
using namespace std;

int main() {
    unsigned int i = 0x557e89f3;

    unsigned char c[4];
    copy_n((unsigned char*)&i, 4, c);

    cout << hex << (int)c[0] << ' ' << (int)c[1] << ' '
        << (int)c[2] << ' ' << (int)c[3] << endl;

    return 0;
}

它在little-endian系统上输出以下内容。 在大端系统上,订单将被颠倒。

f3 89 7e 55

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM