4

gcc を使用して Linux でコンパイルします。

これを16進数に変換したいと思います。10 これは a. 以下のコードでこれを行うことができました。

unsigned int index = 10;
char index_buff[5] = {0};
sprintf(index_buff, "0x%x", index);
data_t.un32Index = port_buff;

ただし、問題は、それを構造体に割り当てる必要があり、割り当てる必要がある要素が unsigned int 型であることです。

ただし、これは機能します。

data_t.un32index = 0xa;

ただし、サンプル コードは、文字列から unsigned int に変換しようとしていると見なされるため、機能しません。

私はこれを試しましたが、これも失敗しました

data_t.un32index = (unsigned int) *index_buff;

アドバイスありがとうございました。

4

3 に答える 3

13

は?変数に値がある場合、10 進数/16 進数は関係ありません。やるだけ

data_t.un32index = index;

10 進数と 16 進数は、人間が読み取れるように数字を印刷するときの単なる表記です。

C(またはC++、Java、またはこれらの型がマシンレジスタのセマンティクスと密接に一致するセマンティクスを持つ「プリミティブ」である多くの言語のいずれか)の整数変数の場合、それが保持する値は「16進数である」とは言えません。 .

値は、変数をバックアップするメモリまたはレジスタにバイナリで保持されます (すべての典型的な最新の電子コンピューターでは、本質的にデジタルでバイナリです)。その後、さまざまな文字列表現を生成できます。これは、基数を選択する必要がある場合です。使用する。

于 2009-03-24T10:12:45.510 に答える
7

以前の回答に同意しますが、実際に16進文字列を符号なし整数に変換するコードを共有して、それがどのように行われるかを示すだけだと思いました:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char *hex_value_string = "deadbeef";
    unsigned int out;

    sscanf(hex_value_string, "%x", &out);

    printf("%o %o\n", out, 0xdeadbeef);
    printf("%x %x\n", out, 0xdeadbeef);

    return 0;
}

実行すると次のようになります。

emil@lanfear /home/emil/dev $ ./hex
33653337357 33653337357
deadbeef deadbeef
于 2009-03-24T10:20:25.337 に答える
2

ただし、サンプル コードは、文字列から unsigned int に変換しようとしていると見なされるため、機能しません。

これは、次のように書くと次​​のようになるためです。

data_t.un32index = index_buff;

タイプの不一致がありますindex_buff文字配列をunsigned intieに割り当てようとしていdata_t.un32indexます。

index提案どおりに を に直接割り当てることができるはずですdata_t.un32index

于 2009-03-24T10:16:46.327 に答える