0

倍精度浮動小数点数を 16 進数で表す char 配列があります。

char *hex = ""402499999999999A"

hex各 char を独自の char 配列として抽出し、 unsigned int に読み込みたいnum。たとえば、私は試しました

sscanf((char *)&hex[3], "%X", &num);

しかし、これは4番目のcharを個々のchar配列として与えるのではなく、4番目の位置からsub char配列を与えます。これは、配列が最初の要素のポインタによって与えられるためだと思います。

これを行うより良い方法はありますか?見たところstrcpy、最初のn文字しかコピーできないようで、ダメです。

4

2 に答える 2

1

これはさまざまな方法で行うことができます。1つの方法は次のとおりです(これは、あなたが行っていた正しい方法です):

char only_1_char[2] = {'\0', '\0'};
only_1_char[0] = hex[3];
sscanf(only_1_char, "%X", &num);

より効率的なソリューション:

if (hex[3] <= '9')
    num = hex[3] - '0';
else
    num = hex[3] - 'A' + 10;

ただし、これは単なるサンプルです。実際には、可能であれば、無効な入力と小文字に注意する必要があります。

于 2012-05-09T22:55:55.203 に答える
0

次のようなことを試してください:

for(i = 0; src[i] != 0; i++) {
    if(src[i]) <= '9') {
        dest[i] = src[i] - '0';
    } else {
        dest[i] = toupper(src[i]) - 'A' + 10;
    }
}

エラー処理で改善できます (たとえば、"src[i]" に有効な文字が含まれているかどうかを検出します)。

于 2012-05-09T22:54:02.420 に答える