ページ 11

char*からshortへの変換

Posted: 2011年1月21日(金) 16:15
by bezita
C言語でchar*からshortへの変換で悩んでいます。

下記のソースコードでchar*からshortへの変換を行いました。

unsigned char * aaa = "90ab";
unsigned short bbb;
//bbb = 0x90ab;
bbb = (short)atoi(aaa);
printf("test char:0x%s\n", aaa);
printf("test short:0x%x\n", bbb);


実行結果は、下記のとおりでshort型に変換すると表示内容が変わってしまいました。

      test char:0x90ab
      test short:0x5a

どうすれば、

Re: char*からshortへの変換

Posted: 2011年1月21日(金) 16:17
by みけCAT
strtol関数を使ってみてください。
http://www.geocities.jp/ky_webid/c/044.html

Re: char*からshortへの変換

Posted: 2011年1月21日(金) 16:20
by bezita
すみません。間違えて編集中のものを投稿してしまいました。

atoiの場合、数値のみしか処理されないため、90abの90のみを16進数で表示することは理解できました。

今試しているのは、sscanfを使ったやり方ですが、これもうまくいかずに悩んでおります。

      unsigned char * aaa = "90ab";
unsigned short bbb;
//bbb = (short)atoi(aaa);
bbb= sscanf(aaa, "%x");
printf("test char:0x%s\n", aaa);
printf("test short:0x%x\n", bbb);

どなたかご教授いただければ幸いです。

Re: char*からshortへの変換

Posted: 2011年1月21日(金) 16:25
by みけCAT
sscanfなら
sscanf(aaa, "%x",&bbb);
でしょう。