簡體   English   中英

C / C ++整數到十六進制到char數組到char

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM