0

sprintf を使用せずに C でこれらの変換を行うにはどうすればよいですか?

20 => 0x20
12 => 0x12

現在私は持っています:

int year = 12;
int month = 10;
int day = 9;
unsigned char date[3];

date[0] = year & 0xFF;
date[1] = month & 0xFF;
date[2] = day & 0xFF;

日付には { 0x0C, 0x0A, 0x09 } が含まれますが、{ 0x12, 0x10, 0x09 } にしたい

4

3 に答える 3

6

10進数で各桁を取得し、それを16進数で同等のものに掛けるだけです。

#include <stdio.h>

int hex(int v){
int total = 0;
int resultbase = 1;
while(v > 0 ){
    total += resultbase * (v % 10);
    resultbase *= 16;
    v /= 10;
}

return total;
}

 int  main(){
printf ("12 => %x, 20 => %x\n", hex(12), hex(20));
return 0;

}

于 2012-10-09T10:53:03.873 に答える
5

使用している限定された 2 桁の範囲の場合:

assert(year >= 0 && year < 100);
date[0] = (year / 10) * 16 + (year % 10);

((year / 10) << 4) | (year % 10)それがあなたにとってより意味があるかのように表現することができます。

于 2012-10-09T10:50:26.427 に答える