C / C ++整数到十六进制到char数组到char

时间:2013-06-06 05:54:02

标签: c++ c arrays char hex

我一直在尝试将此整数转换为十六进制并已成功完成,但我需要使用此十六进制来设置某些内容。现在为此我需要使用char而不是char数组。没有手动设置它没有其他任何工作。也许问题在于我使用sprintf转换为十六进制的问题,但不管怎样,我确信有办法完成此任务。现在我需要改变的是输出是char z但我还没有找到一种方法让它工作。任何帮助是极大的赞赏。感谢

编辑:现在代码可能没有意义,因为它不完整,我没有看到输入不相关代码的目的。 int x永远不会超过100,整点就是将它转换为十六进制并将其写入我所拥有的设置的内存中。所以我一直试图弄清楚如何将整数转换为十六进制为char。正如我刚才注意到的那样,尽管sprintf将它转换为存储在char中的字符串,但是有人指出了nonstring。但我需要将int转换为十六进制并稍后将其分配给char变量forbuse。这就是我被困的地方。我不知道以一种格式和方式完全实现所有这一切的最好方法,而不需要进入字符串和其他东西。

VOID WriteSetting(int x)
{
    char output[8];
    sprintf(output, "0x%X", x);
    char z = 0x46
    unsigned char y = z
}

工作代码:

VOID WriteSetting(int x)
{
    unsigned char y = (unsigned char)x;
    Settingdb.Subset.Set = y;
}

4 个答案:

答案 0 :(得分:0)

你试过吗

printf("0x%X", z);

答案 1 :(得分:0)

虽然C ++标准没有明确要求它,但字符的大小有时是一个字节,整数是4个字节。我认为这就是你使用4个字符数组的原因。

所以当你有一个整数类型并尝试将它塞进一个字符时,你将失去精确度。

P.S。有关数据类型大小的更精确解释如下:What does the C++ standard state the size of int, long type to be?

答案 2 :(得分:0)

如果你想要的是:

WriteSetting(70);

WriteSetting(0x46);

做与

相同的事情
char z = 0x46;
unsigned char y = z;

然后您需要做的就是:

void WriteSetting(int x)
{
    unsigned char y = x;
}

整数没有任何固有的基础 - 它们只是数字。 unsigned char y = 0x46;unsigned char y = 70;之间没有任何区别。

答案 3 :(得分:0)

void WriteSetting(unsigned char *y, int x){
    if(x > 100){
        fprintf(stderr, "x value(%d) is invalid at %s\n", x, __func__);
        return ;
    }
    *y = x;//There is no need for conversion probably
}