0

解決策を見つけるために検索する魔法の言葉がわからないので、これは私をイライラさせています。

私は初期化します:

unsigned char foo[] = {'0', 'x', '1', '1'};

unsigned char bar[] = {'\0'};

基本的に、bar[0]を値0x11に等しくしたいと思います。それ、どうやったら出来るの?私は愚かで、簡単な解決策があると確信していますが、それを理解することはできません。私は試した

memcpy(&bar[0], &foo[0], 1);

ただし、これにより、bar [0]の値は0x30になります。これは、「0」文字のASCII値です。

ヘルプ/ヒントはありますか?

4

4 に答える 4

4

sscanfテキスト値を整数に変換する場合は、関数を使用して実行できます。

char * string = "0x11";
int numeric;
sscanf(string, "%i", &numeric);
// numeric is now 0x11

ご了承ください:

  • string最後に終了ゼロがあるため、実際には5文字です。上記の終了していない配列{'0'、'x'、 '1'、 '1'}でC-string-expecting関数を実行した場合、配列を超えてデータの処理を続行する場合、これは絶対に望ましくありません。 。
  • 外部から提供されたデータを実際に使用する場合は、sscanfの戻り値をチェックして、目的の変換が実際に行われたことを確認する必要があります。
于 2012-10-23T07:45:13.087 に答える
3

表記は、 ASCIIシステムで定義されているように'a'、文字を数値に変換しますa

したがって、

unsigned char foo[] = {'0', 'x', '1', '1'};

実は

unsigned char foo[] = {48, 120, 49, 49};

または、16進数で

unsigned char foo[] = {0x30, 0x78, 0x31, 0x31};

だから、あなたが必要なのは単純に

unsigned char bar[] = { 0x11 };

また

bar[0] = 0x11;

すでにbarどこかで定義している場合。

于 2012-10-23T07:44:08.593 に答える
2

私はあなたの質問が少し間違って定式化されている可能性があると思います、そしてあなたは文字列を16進整数barに変換するときにあなたが得る値を最初のalementに持たせたいかもしれません:foo

char foo[] = "0x11";
char bar[1];
bar[0] = (char)strtol(foo, NULL, 0);

あなたの最初の初期化ではfoo、末尾を見逃します\0

于 2012-10-23T07:51:38.607 に答える
0

あなたがそれをすることができる簡単な方法:(そしてもっとあります)

変換する場合:に変換unsigned char foo[] = {'0', 'x', '1', '1'};0x11て保存しunsigned char bar[] = {'\0'};ますこれを行う:

unsigned char foo[] = {'0', 'x', '1', '1', '\0'};//Add end of string character, to be sure
unsigned char bar[] = {'\0'};//Allocated 1 byte of memory
bar[0]=strtol(foo,NULL,16);//Include stdlib.h. Converts strings to long int and due to assignment, result downgraded to unsigned char
于 2012-10-23T07:53:37.310 に答える