我一直在尝试将此整数转换为十六进制并已成功完成,但我需要使用此十六进制来设置某些内容。现在为此我需要使用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;
}
答案 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
}