|
本ホームページの書式制御文字列を見てみたのですが、
どれを使用すれば思うような形に整形できるか分かりませんでした。
そこで悩んだあげく以下のようなソースを作ってみたのですけど、、、sprintf使った方が明らかに良いですね。。。
うぅ。。。ダメなわたし。。。
RAPTさん頂きます。
Blueさん、RAPTさん、ありがとうございました。
#解決したけど心が晴れないのはなぜ?
#include <stdio.h>
#include <memory.h>
#include <string.h>
#define BCD_YEAR 0x2005
#define BCD_MONTH 0x08
#define BCD_DAY 0x12
#define BCD_HOUR 0x15
#define BCD_MIN 0x30
#define BCD_SEC 0x00
#define K4 0xF000
#define K3 0x0F00
#define K2 0x00F0
#define K1 0x000F
int main(void)
{
char tmp[2];
char buf[14+1];
memset(tmp, 0x00, sizeof(tmp));
memset(buf, 0x00, sizeof(buf));
tmp[0] = '0' + ((BCD_YEAR & K4) >> 12);
strcat(buf, tmp);
tmp[0] = '0' + ((BCD_YEAR & K3) >> 8);
strcat(buf, tmp);
tmp[0] = '0' + ((BCD_YEAR & K2) >> 4);
strcat(buf, tmp);
tmp[0] = '0' + (BCD_YEAR & K1);
strcat(buf, tmp);
tmp[0] = '0' + ((BCD_MONTH & K2) >> 4);
strcat(buf, tmp);
tmp[0] = '0' + (BCD_MONTH & K1);
strcat(buf, tmp);
tmp[0] = '0' + ((BCD_DAY & K2) >> 4);
strcat(buf, tmp);
tmp[0] = '0' + (BCD_DAY & K1);
strcat(buf, tmp);
tmp[0] = '0' + ((BCD_HOUR & K2) >> 4);
strcat(buf, tmp);
tmp[0] = '0' + (BCD_HOUR & K1);
strcat(buf, tmp);
tmp[0] = '0' + ((BCD_MIN & K2) >> 4);
strcat(buf, tmp);
tmp[0] = '0' + (BCD_MIN & K1);
strcat(buf, tmp);
tmp[0] = '0' + ((BCD_SEC & K2) >> 4);
strcat(buf, tmp);
tmp[0] = '0' + (BCD_SEC & K1);
strcat(buf, tmp);
printf("%s\n", buf);
return(0);
}
↓最終的な変換ソース↓
#include <stdio.h>
#include <memory.h>
int main(void)
{
char buf[14+2];
int year = 0x2005;
int month = 0x09;
int day = 0x12;
int hour = 0x15;
int min = 0x30;
int sec = 0x00;
memset(buf, 0x00, sizeof(buf));
sprintf(buf, "%04x%02x%02x%02x%02x%02x\n", year, month, day, hour, min, sec);
printf("buf : %s\n", buf);
return 0;
}
|