私は変数を持っています:
int a = 10;
as:0x
の前にある16進値に変換し、他の変数に割り当てたいのですが、どのように変換しますか?10
0x10
使用snprintf()
:
char buf[128];
snprintf(buf, 128, "0x%d", a); // buf = "0x10"
次に、以下を使用して読み返しますsscanf()
。
unsigned int new_a;
if (1 == sscanf(buf, "0x%X", &new_a))
{
}
10 進数を 16 進数として再解釈しようとする場合、問題は次のように多項式A = a*10^n + b*10^(n-1) + ... + c
を再評価することを意味B=a*16^n + b*16^(n-1) + ... + c
します。
1 1 2 3 = 1*1000 + 1 * 100 + 2 * 10 + 3
(0x) 1 1 2 3 = 1*4096 + 1 * 256 + 2 * 16 + 3 (=4387 dec)
modulo と 10 で除算を繰り返して係数を求め、適切な 16 の累乗を掛けた結果を加算します (シフトを使用して実装)。
これは表現の問題です。10 進数値を 16 進数として簡単に表すことができます。
print("0x%x", a);
0xa
特定のケースで印刷されます。0xaC
または 10 または 012 がある場合は重要ではないためです。