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

C/C++ integer to hex to char array to char

本文关键字:char 十六进制 数组 整数 c++      更新时间:2023-10-16

嗯,我一直试图将这个整数转换成十六进制,并成功地做到了这一点,但我需要使用这个十六进制设置的东西。现在我需要使用一个char而不是一个char数组。如果不手动设置,其他方法都不起作用。也许问题在于我使用sprint转换为十六进制的问题,但无论哪种方式,我确信有一种方法来完成这项任务。现在我需要改变的是让输出是char z但我还没有找到让它工作的方法。非常感谢任何帮助。由于

编辑:现在这段代码可能没有直接意义,因为它是不完整的,我看到没有目的输入不相关的代码。int x永远不会超过100,关键是要把它转换成十六进制,然后把它写进我的内存中。所以我一直在试图找出如何将整数转换成十六进制成一个字符。nonstring就像有人指出的那样,即使sprintf将其转换为存储在char中的字符串,正如我刚刚注意到的。但我需要将整型转换为十六进制并将其赋值给字符变量,以便稍后使用。这就是我被困住的地方。我不知道最好的方法是在不使用字符串和其他东西的情况下,以一种格式和方式完成所有这些。
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;
}

如果你想要的是:

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;之间没有任何区别

你试过了吗

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

虽然c++标准没有明确要求,但字符的大小有时是一个字节,有时是一个整数4字节。我想这就是为什么你使用4个字符的数组。

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

注:关于数据类型大小的更精确的解释如下:c++标准规定了int (long类型)的大小是多少?

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