私は変数を持っています:
int a = 10;
as:0xの前にある16進値に変換し、他の変数に割り当てたいのですが、どのように変換しますか?100x10
使用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 がある場合は重要ではないためです。