【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※返信付き投稿の削除は禁止!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら


本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.23015

BCDを文字列に変換したい
投稿者---カフェイン(2005/09/09 11:38:42)


UNIX C でプログラム作成しています。

BCDコードを文字列に変換したいのですが、どのようにすれば良いか見当つきません。
どなたかアドバイスお願いします。

例)2005/09/12 15:30:00
year = 0x2005
month = 0x09
day = 0x12
hour = 0x15
min = 0x30
sec = 0x00
となっていて、
date = "20050912153000" (yyyymmddhhmiss)
のように文字列に変更したいです。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:BCDを文字列に変換したい 23016 Blue 2005/09/09 11:48:19


No.23016

Re:BCDを文字列に変換したい
投稿者---Blue(2005/09/09 11:48:19)


sprintf関数を使ってみてはいかがでしょうか。
書式制御文字列について調べる必要がありますが。



この投稿にコメントする

削除パスワード

No.23017

Re:BCDを文字列に変換したい
投稿者---RAPT(2005/09/09 13:54:26)


やってみました。

#include <stdio.h>
int main(void)
{
    int year = 0x2005;
    int month = 0x09;
    int day = 0x12;
    int hour = 0x15;
    int min = 0x30;
    int sec = 0x00;
    printf("%04x%02x%02x%02x%02x%02x\n", year, month, day, hour, min, sec);
    return 0;
}

output:
20050912153000



この投稿にコメントする

削除パスワード

No.23018

Re:BCDを文字列に変換したい
投稿者---カフェイン(2005/09/09 14:17:56)


本ホームページの書式制御文字列を見てみたのですが、
どれを使用すれば思うような形に整形できるか分かりませんでした。

そこで悩んだあげく以下のようなソースを作ってみたのですけど、、、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;
}





この投稿にコメントする

削除パスワード

No.23020

Re:BCDを文字列に変換したい
投稿者---RAPT(2005/09/09 17:27:58)


> sprintf(buf, "%04x%02x%02x%02x%02x%02x\n", year, month, day, hour, min, sec);
上記の \n は不要では?



この投稿にコメントする

削除パスワード

No.23027

Re:BCDを文字列に変換したい
投稿者---カフェイン(2005/09/11 15:52:08)


>sprintf(buf, "%04x%02x%02x%02x%02x%02x\n", year, month, day, hour, min, sec);
>上記の \n は不要では?

指摘ありがとうございます。
危うくバグ仕込むところでした。^ ^;


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧