• ベストアンサー

日本語の変換の問題

chie65536の回答

  • ベストアンサー
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.5

こういう質問をする場合、 -------------- char * buff = "あいうえお"; があります。 漢字コードは「シフトJIS」で、メモリ中には、16進コードで「82 A0 82 A2 82 A4 82 A6 82 A8 00」と入っているとします。 シフトJIS漢字の第1バイトが左、第2バイトが右です。 終端文字も入っています。 文字列に半角文字は入りません。半角カナも入りません。全角の2バイト文字しか入って来ない事とします。 それを「16進数表記した文字列」に変換したいですが、どうすれば、よろしいですか? 結果は "82A082A282A482A682A8" と言う文字列で欲しいです。 文字列の終端には「\0」つまり「終端文字」も欲しいです。 バイトの区切りに空白などは必要ありません。隙間なく並んでいれば良いです。 16進数の英字A~Fは「大文字」で欲しいです。 16進コードでメモリ中に「38 32 41 30 38 32 41 32 38 32 41 34 38 32 41 36 38 32 41 38 00」と並んでいるイメージです。 -------------- と、質問しましょう。 回答者は「あいうえお、と言われても、漢字コードは何?JIS?シフトJIS?EUC?UTF-8?漢字コード体系が何なのか、書いてないと判らない」です。 「16進数に変換したい」と言っても「じゃあ、具体的に、どういう結果が欲しいの?AからFは大文字?小文字?どっち?書いてないと判らない」です。 そういう「細かい仕様」をハッキリ書かないから、ANo1やANo2のような「ツッコミ」が入るのです。 この回答の補足説明で、上記のような「細かい仕様」を明記して下さい。そうすれば、貴方が欲しい回答が得られるでしょう。

関連するQ&A

  • VC++2010 MFC 16進数を10進数に変換

    VC++2010 MFCでアプリケーションを作成しています。   16進数を10進数に変換することについて質問なんですが、 例: char buff_char[128]; buff_char[0] = 0xFD; buff_char[1] = 0xE8; buff_char[2] = 0x00; 上記の通り16進数が入っており それを メッセージボックスで 65000と10進数に変換をして値を表示をしたいのです。 すみませんよろしくお願いします。

  • 16進数を10進数文字列に変換する

    こんにちは。 お世話になります。 16進数を10進数文字列に変換する処理を作りたいのですが 方法が分かりません。 提供されている関数は使わずに変換する方法を知っている方がいたら教えていただきたいです。 以下は10進数を16進数に変換する関数を作ったものです。 void SetBinHex(BYTE Bin,BYTE *buff) { /*16進の変換*/ *(buff)=Bin/16; *(buff+1)=Bin%16; if(*(buff)>9) *(buff)=*(buff)+0x37; else *(buff)=*(buff)+0x30; if(*(buff+1)>9) *(buff+1)=*(buff+1)+0x37; else *(buff+1)=*(buff+1)+0x30; return ; } よろしくお願いします。

  • VC++2010 MFC 符号付きchar型変換

    VC++2010 MFCで今アプリケーションを作成していて、質問がございます。 例 char c_buff; unsigned char uc_buff; 上記のように変数を宣言し、 c_buffには0xFD;が入ってます。 その値を uc_buffに代入したいのですがどのように行ったら代入できるか よろしくお願いします。

  • 文字列変換プログラムのポインタについて

    いかの関数は、文字列を16進文字列に変換する関数です。過去の質問を参考に自分で作りました。 動作することはするんですが、よく見るとpoとpiは領域確保していません。これってプログラム上まずいでしょうか。 char *conv( char *buff, char *str ) {   char *po;   char *pi;   for(po=buff, pi=str; *pi; pi++)   {     if(0 <= *pi && *pi <= 15)     {       sprintf(po, "%x", 0);       po++;       sprintf(po, "%x", *pi);       po++;     }else {       sprintf(po, "%x", (0x0f & (*pi >> 4)));       po++;       sprintf(po, "%x", (0x0f & (*pi % 16)));       po++;     }   }   *po='\0';   return(buff); }

  • 警告 : 問題のあるポインタの変換

    #include <iostream.h> char *f(){   char buf[1] = "\0"; // char *buf = "\0";  return static_cast<char*>(buf); } main(){  cout << f(); これで、関数の型が char * なのに、char [] 型変数を 返そうとするソースだからコンパイルで警告が出るんだと思いました。 関数の型が char [] なのに、char * 型変数を返したなら 返された値を変更できないから不都合が起こるのが 分かりますが、上に書いたソースの場合は不都合なことに なりますか? 問題のあるポインタの変換ということを言われるのが納得 できないので、納得させてください。

  • 日本語変換

    internet exploer 上での日本語変換についてお尋ねします。 internet exploer で日本語変換(ATOK使用)を使用していて居ます。ホームページを見ていて別の所に移ったとき日本語変換がら無変換に変わることが、たまたまあります。そのときは、日本語変換に戻して(半角/全角漢字のキーを押して)使っています。 MACなどでは、日本語変換のキーがありそれを押さない限り固定になっているようですが。internet exploer 上でもこのように日本語変換を固定する方法は、ないのでしょうか。 

  • ありえない日本語変換をされてしまう。

    Windows XP(Sp1) IME(Microsoft Natural Input 2002 Ver 8.1) です。 古いOffice(2002)が未開封であまってたのでインストールしてから 日本語の変換がおかしくなってしまいました。 例えば「いい」で変換すると変換候補に(上から順に) 「いの」、「言い」、「良の」、「好の」、「井伊」・・・ となります。(「い」が「の」になってる) 他には「せいぜい」で変換すると 「精々」「精精」「のぜの」が出ます。 これはどうやったら直るでしょうか?

  • 文字を16進変換

    C言語にて関数などを使わずに計算式なので文字を16進数に変換したいのですがどのような処理にしたらいいでしょうか?? char型で用意した変数に1文字を格納し、それをアスキーコードの16進数に変換したいです。 よろしくお願いします。

  • 通信(送信)のプログラム

    bool WriteData(char *buff, unsigned int data_size) {     DWORD dwWritten; /* ポートへ書き込んだバイト数 */ WriteFile(hComm, buff, data_size, &dwWritten, NULL); if (dwWritten!=data_size) { printf("データの送信に失敗しました。\n"); return false; } return true; } 上の関数はシリアル通信の送信する関数なんですが、これに数値などを入れたいんですが、char型のため、一文字しか入れれません。たとえば、01ならchar型の0とchar型の1を別々に送らないとだめなんですが、このようにするしか無理なんでしょうか?int型の数値を好きなように入れて送りたいんですが。あと、OxFFのように16進数も入れれると便利なんですが。駄文ですいません。プログラムの知識が浅はかですいません。

  • 問題のあるポインタ変換

    char *x; int i; x = f( i ); で、fは char * ( int y ); と言った関数なのですが、 警告で、問題のあるポインタ変換と出てしまいます。 これはなぜでしょう?ご教授お願い致します。