0

好吧,我一直在尝试将此整数转换为十六进制并已成功完成,但我需要使用此十六进制进行设置。现在为此我需要使用 char 而不是 char 数组。如果没有手动设置,其他任何方法都不起作用。也许问题出在我使用 sprintf 转换为十六进制的问题上,但无论哪种方式,我都确信有办法完成这项任务。现在我需要改变的是输出是 char z 但我还没有找到让它工作的方法。任何帮助是极大的赞赏。谢谢

编辑:现在这个代码可能没有直接意义,因为它不完整,而且我没有看到输入无关代码的目的。int x 永远不会超过 100,重点是将其转换为十六进制并将其写入我拥有的设置的内存中。所以我一直在试图弄清楚如何将整数转换为十六进制转换为字符。正如我刚刚注意到的那样,即使 sprintf 将其转换为存储在 char 中的字符串,也有人指出非字符串。但我需要将 int 转换为 hex 并将其分配给 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

4 回答 4

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;

于 2013-06-06T06:30:12.720 回答
0

你有没有尝试过

printf("0x%X", z);
于 2013-06-06T05:57:09.330 回答
0

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

所以当你有一个整数类型并试图把它塞进一个字符中时,你会失去精度。

PS 对数据类型大小的更精确解释如下:C++ 标准规定 int、long 类型的大小是多少?

于 2013-06-06T06:00:37.670 回答
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
}
于 2013-06-06T07:41:21.473 回答