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

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

 詳しくはこちら



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

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


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

No.20518

全角文字⇔整数の変換
投稿者---なす(2005/03/30 23:29:03)


全角文字と整数を相互に変換する方法を考えています。例えば、

int n;
n = '轟';
printf("%d\n",n);

とすると、画面には36236が表示され、全角文字を16bitの整数に対応させることが出来ます。
ここで逆に、36236が与えられたときに「轟」という文字を取り出す方法はないでしょうか? 半角なら簡単なのですが。
どなたかよろしくお願いします。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:全角文字⇔整数の変換 20519 RAPT 2005/03/30 23:57:50
<子記事> Re:全角文字⇔整数の変換 20520 Blue 2005/03/30 23:59:16
<子記事> Re:全角文字⇔整数の変換 20521 RiSK 2005/03/31 00:10:07


No.20519

Re:全角文字⇔整数の変換
投稿者---RAPT(2005/03/30 23:57:50)


こんな感じ?

#include <stdio.h>

void put_kanji(int val)
{
    printf("%d => %c%c\n", val, val >> 8, val & 0xffff);
}

int main(void)
{
    put_kanji(36236);
    return 0;
}



この投稿にコメントする

削除パスワード

No.20520

Re:全角文字⇔整数の変換
投稿者---Blue(2005/03/30 23:59:16)


36236を16進表記にするとすぐわかると思います。

#include <stdio.h>

int main( void )
{
    unsigned short s = 36236;
    unsigned char  p[ 3 ];

    /* printf( "16進表記:%x\n", s ); */
    p[ 0 ] = ( unsigned char )( ( s >> 8 ) & 0xff );
    p[ 1 ] = ( unsigned char )s;
    p[ 2 ] = '\0';

    printf( "%d→%s\n", s, p );

    return 0;
}




この投稿にコメントする

削除パスワード

No.20521

Re:全角文字⇔整数の変換
投稿者---RiSK(2005/03/31 00:10:07)


> n = '轟';

ってか,処理系依存のコードでは?
期待した値が取れてることが不思議…


この投稿にコメントする

削除パスワード

No.20522

ありがとうございます
投稿者---なす(2005/03/31 23:28:39)


>>20519
>>20520
ありがとうございます。まだちょっと理解は出来ていませんが、ゆっくり考えてみます。

>>20521
確かにそうですね。文字と数字を1対1で対応させられればそれでいいので、
もっとスマートな方法があればご教授願います。


この投稿にコメントする

削除パスワード

No.20523

Re:ありがとうございます
投稿者---RiSK(2005/04/01 00:52:01)


>確かにそうですね。文字と数字を1対1で対応させられればそれでいいので、
>もっとスマートな方法があればご教授願います。

全然スマートじゃないし,処理系に依存するコード
#include <stdio.h>
#include <stdlib.h>
int main(void) {
    union {
        char multi_char[2];
        short char_code;
    } u;
    if (sizeof(char[2]) != sizeof(short)) abort();
    u.char_code = (short)36236;
    printf("%c%c\n", u.multi_char[1], u.multi_char[0]);
    return 0;
}



この投稿にコメントする

削除パスワード

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