[英]C/C++ integer to hex to char array to char
好吧,我一直在嘗試將此整數轉換為十六進制,並且成功完成了此操作,但是我需要使用此十六進制來進行設置。 現在,為此,我需要使用一個char而不是char數組。 如果沒有手動設置,沒有其他任何工作。 也許問題出在我使用sprintf轉換為十六進制的問題上,但是無論哪種方式,我都確信有一種方法可以完成此任務。 現在,我需要更改的是將輸出設置為char z,但是我還沒有找到一種方法來使其正常工作。 任何幫助是極大的贊賞。 謝謝
編輯:現在,該代碼可能不直接有意義,因為它不完整,我看不到輸入無關代碼的目的。 int x永遠不會超過100,關鍵是將其轉換為十六進制並將其寫入我所擁有的設置的內存中。 因此,我一直在嘗試找出如何將整數轉換為十六進制的char。 有人指出的非字符串,即使sprintf將其轉換為存儲在char中的字符串,正如我剛剛注意到的那樣。 但是我需要將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;
}
你有沒有嘗試過
printf("0x%X", z);
盡管C ++標准沒有明確要求,但是字符的大小有時是一個字節,一個整數是4個字節。 我認為這就是為什么要使用4個字符的數組。
因此,當您使用整數類型並嘗試將其填充為單個字符時,您將失去精度。
PS這里是對數據類型大小的更精確的解釋: C ++標准說明int,long類型的大小是什么?
如果您想要的是:
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 = 0x46;
和unsigned char y = 70;
。
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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.