これが私のコードのはるかに短いバージョンです:
char token[256];
unsigned int maskval = 0;
//Token gets read in here.
printf("token: %s\n", token);
if (sscanf(token + 2, "%x", &maskval) == 1) {
//do stuff
} else {
printf("error: %d, %x\n", maskval, maskval);
}
ご覧のとおり、16進文字列を関数に渡し、それらをトークンに読み取り、sscanf()を使用して16進値の文字列バージョンをunsignedintに変換しています。文字列トークンは、常に「0x」、「0X」、「Ox」、または「OX」で始まります。これは、ユーザーが値を入力するときに0とOの違いがわからないためです(viは同じグラフィックを表示します)。「0x00EE」を渡すと、次のようになります。
token: 0x00EE
error: 0
私が信じている問題は、「0x00EE」または「OxOOEE」(ゼロ対大文字のo)の線に沿って何かを渡すかどうかです。どちらもviで同じように見えますが、このシナリオで異なる方法で処理されるかどうかはわかりません。うまくいけば、私は見落としていた本当に単純で愚かなことをしているだけです(通常はそうです)。また、使ってみました
maskval = strtol(token, NULL, 16);
sscanf()の代わりに、まったく同じ結果が得られます。
何か案は?