C言語において、16進数の文字列を2進数の unsigned int
または unsigned long
に変換する最も効率的な方法は何ですか?
例えば、0xFFFFFFFE
があるとすると、4294967294
というbase10の値を持つint
が欲しいのですが、これはどうすればいいでしょうか?
これを試してみてください。
#include <stdio.h>
int main()
{
char s[] = "fffffffe";
int x;
sscanf(s, "%x", &x);
printf("%u\n", x);
}
エリック
なぜ、うまくいくコードソリューションが投票で落とされるのでしょうか?もちろん、醜いし、最速の方法ではないかもしれませんが、 "strtol" や "sscanf" と言うよりは、勉強になります。自分でやってみれば、ボンネットの中で何が起きているのかがわかるでしょう。
私はあなたの解決策が否決されるべきだとは思いませんが、なぜそうなったかについて私が推測すると、それは実用性が低いからだと思います。 投票の考え方は、ベストな回答が上位に来るというもので、あなたの回答はボンネットの中で何が起こっているか(あるいはそれが起こりうる方法)についてはより有益かもしれませんが、実稼働システムで16進数を解析するベストな方法でないことは間違いないでしょう。
繰り返しますが、あなたの回答が教育的観点から見て間違っているとは思いませんし、確かに私はそれを不採用にするつもりはありません(しなかった)。 あなたの回答が気に入らないからといって、がっかりして投稿を止めてしまわないように。 よくあることです。
私の回答であなたが自分の回答が否決されたことを良く思うとは思えませんが、特に否決された理由を聞いて誰も答えてくれないのは楽しくないことでしょう。