【问题标题】:How do I save a decimal number as hexadecimal on a single byte? [duplicate]如何在单个字节上将十进制数保存为十六进制? [复制]
【发布时间】:2017-05-15 09:57:55
【问题描述】:
#include <stdio.h>
int main()
{
    int x = 255;
    char hex[4] = {0};
    hex[0] = 0x02;
    hex[1] = 0x20;
    hex[2] = 0xef;
    hex[3] = x;
    for(int i = 0; i < 4; i++)
        printf("%X ", hex[i]);
}

这会输出“2 20 FFFFFFEF FFFFFFFF”。应该改变什么才能输出“02 20 EF FF”?

【问题讨论】:

    标签: c char


    【解决方案1】:

    问题是数据溢出。当 0xef = 239 时,char 为 -128 ~ 127。 所以你可以使用类型 intshort 或只是 unsigned char ,就像这样:

    #include <stdio.h>
    int main()
    {
        int x = 255;
        unsigned char hex[4] = {0};
        hex[0] = 0x02;
        hex[1] = 0x20;
        hex[2] = 0xef;
        hex[3] = x;
        for(int i = 0; i < 4; i++)
            printf("%02X ", hex[i]);
    }
    

    【讨论】:

    • 成功了,谢谢。将 char 更改为 unsigned char 也可以。
    • char 的签名是实现定义的。 ((un)signed) char 只有一个最小保证范围。不保证范围是-128..127
    • 如果数字始终小于或等于 255,则使用 unsigned char 而不是 int 表示 x 和 hex。
    猜你喜欢
    • 2023-03-26
    • 2017-08-23
    • 2013-09-12
    • 2015-08-08
    • 2023-03-14
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多