2013-06-06 57 views
0

嗯,我一直在试图将这个整数转换为十六进制,并已成功完成,但我需要使用此十六进制设置的东西。现在,我需要使用char而不是char数组。没有其他工作没有手动设置。也许问题在于我使用sprintf转换为十六进制的问题,但无论哪种方式,我确信有一种方法可以完成此任务。现在我需要改变的是输出是char z,但我还没有找到一种方法来使这个工作。任何帮助是极大的赞赏。谢谢C/C++整数到十六进制字符数组到字符

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

我不明白这一点。转换,char数组,char,int ...都是什么? – 2013-06-06 05:55:27

+2

'0x46'和''0x46''之间有很大的区别' –

+1

使用sprintf时要非常小心,输出缓冲区只有4个字符长,所以如果x在255以上,你会遇到麻烦。一点弦理论也许在这里不会有问题。如果你使用C++查看std :: string,它将解决很多问题。 – Cramer

回答

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;之间完全没有区别。

+0

所以如果我摄入70并将其设置为字符然后将转换为十六进制?我需要它是一个十六进制,否则设置失败并崩溃我正在使用的硬件。所以尽管两者之间没有区别,但srtting的摄入量读数不同 – Kebob

+1

我再说一遍 - *整数没有任何固有的基数*。如果'unsigned char y = 0x46;'适用于你的硬件,那么'unsigned char y = 70;'也可以工作,因为它*完全一样*。 – caf

+0

这工作!非常感谢有用的信息。我只是使用了一些不同的代码,但只使用unsigned char工作,所以非常感谢你。 – Kebob

0

你试过

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

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

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

P.S.数据类型的大小的更精确的解释是在这里:What does the C++ standard state the size of int, long type to be?

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 
}