ショッピングモール  Earth-Based Religions ( Witchcraft )  Fiction ( General )


掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

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

掲示板1

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

No.5092

Quoted Printableについて
投稿者---あきら(2005/12/12 16:10:47)


こんにちは、C++で開発をしています。(超初心者です。)
現在、Quoted Printableの処理について悩んでいます。

例)テスト000がQuoted Printableで
  =83e=83X=83g000と表示されているのですが
  これを、テスト000に変換するロジックを組みたいのですが
  よく分かりません。

Quoted Printableの定義としては、
バイナリデータのうち、文字としてそのまま送信できるデータ(「=」を除く0x21〜0x5E、0x60〜0x7E、スペース、タブ)はそのまま送信し、これ以外のデータは「=」と16進表記を用いて文字列に変換する。
例えば0x0Aなら、「=0A」という文字列に変換する。(実際の転送データは0x3D、0x30、0x41となる。)
ということを調べたのですが、これを実際のコード変換にプログラミングする
ことが出来ません。

どなたか、この実際のソースコードの例などを教えていただけると
たすかります。

説明が、下手で分かりにくいかもしれませんが、よろしくお願いします。



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:Quoted Printableについて 5093 nop 2005/12/12 16:38:36
<子記事> Re:Quoted Printableについて 5094 nop 2005/12/12 16:45:40
<子記事> Re:Quoted Printableについて 5097 かずま 2005/12/12 21:37:45


No.5093

Re:Quoted Printableについて
投稿者---nop(2005/12/12 16:38:36)


>例)テスト000がQuoted Printableで
>  =83e=83X=83g000と表示されているのですが
>  これを、テスト000に変換するロジックを組みたいのですが
>  よく分かりません。

で、何が分からないのですか?
それ以前に、【掲示板利用宣言】を守りましょう。

>Quoted Printableの定義としては、
>バイナリデータのうち、文字としてそのまま送信できるデータ(「=」を除く0x21〜0x5E、0x60〜0x7E、スペース、タブ)はそのまま送信し、これ以外のデータは「=」と16進表記を用いて文字列に変換する。
>例えば0x0Aなら、「=0A」という文字列に変換する。(実際の転送データは0x3D、0x30、0x41となる。)

「Quoted Printableの定義」が与えられているのですから、
与えられた定義の逆の動作を行えばよいのです。


この投稿にコメントする

削除パスワード

No.5094

Re:Quoted Printableについて
投稿者---nop(2005/12/12 16:45:40)


検索すると、quoted-printableにて、
ご丁寧にデコードの方法まで書かれてありますが?

検索くらいは行いましょうね!


この投稿にコメントする

削除パスワード

No.5097

Re:Quoted Printableについて
投稿者---かずま(2005/12/12 21:37:45)


遊んでみました。よい子は真似をしないように。
#include <stdio.h>

#define X(c)  (((c) >> 6) * 9 + (c) & 15)

void qp(char *t, const char *s)
{
    do {
        *t++ = (*s == '=') ? (s += 2, X(s[-1])<<4 | X(*s)) : *s;
    } while (*s++);
}

int main(void)
{
    char s[256];

    qp(s, "=83e=83X=83g000");
    puts(s);
    return 0;
}



この投稿にコメントする

削除パスワード

No.5099

Re:Quoted Printableについて
投稿者---si(2005/12/13 00:46:24)


よい子のプログラム?
#include <stdio.h>

void encode(char *t,int size, const char *s)
{
    char *end = &t[size-1];
    for ( ; *s && t < end; s++,t++) {
        if (*s == '\t' || (0x20 <= *s && *s < '=') || ('=' < *s && *s <= 0x7E)) {
            *t = *s;
        } else {
            if ((t + 3) < end) {
                *t++ = '=';
                sprintf(t++,"%02X",(unsigned char)*s);
            } else {
                break;
            }
        }  
    }
    *t = '\0';
}

void decode(char *t,int size, const char *s)
{
    char *end = &t[size-1];
    for ( ; *s && t < end; s++,t++) {
        if (*s == '=') {
            sscanf(++s,"%02X",t);
            s++;
        } else {
            *t = *s;
        }
    }
    *t = '\0';
}

int main(void)
{
    char *s = "テスト000";
    char ec[256];
    char dc[256];
    encode(ec,256,s);
    printf("%s\n",ec);
    decode(dc,256, ec);
    printf("%s\n",dc);
    return 0;
}



この投稿にコメントする

削除パスワード

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




掲示板提供:Real Integrity