• 締切済み

文字コードの問題

C言語の問題で次のようなものがあるのですが、 考えてもどんなコードになるのかどうしてもわかりません。 どなたかお分かりになる方はいらっしゃいませんでしょうか? お願いいたします。 ~問題~ 2桁の16進数('41~49','50~'59')を入力すると対応する文字を表示する。 ただし%xは使用しないこと。 なお、入力に間違いはないものとする。 (ヒント:入力は一つの数値か、二つの文字か?) 実行結果 2桁の16進数('41~49','50~'59')を入力してください:53 文字コード「53」の文字は「S」です。

みんなの回答

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.1

#include <stdio.h> main() {   char str[3] ;   printf("2桁の16進数('41~49','50~'59')を入力してください:");   gets(str);   printf("文字コード「%s」の文字は「%c」です。",str,(str[0]-'0')*16+str[1]-'0'); } でいかがでしょうか? エラー判定とかは一切していません。 エラー判定するのであれば、 #include <stdio.h> main() {   char str[3] ;   do {     str[0] = str[1] = str[2] = '\0' ;     printf("2桁の16進数('41~49','50~'59')を入力してください:");     gets(str);   } while ( !( str[0] == '4' && str[1] >= '1' && str[1] <= '9' && str[2] == '\0' ) && !( str[0] == '5' && str[1] >= '0' && str[1] <= '9' && str[2] == '\0' ) ) ;   printf("文字コード「%s」の文字は「%c」です。",str,(str[0]-'0')*16+str[1]-'0'); } でいかがでしょうか。

noname#15820
質問者

お礼

あの後なんとか自己解決してすっかり忘れてしまい御礼が遅くなり申し訳ありませんでした。 問題としては配列が使えない条件だったので、arukamunさんの回答ではNGだったのですが、違うやり方もあるのだと知れてよかったです。 どうもありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • c言語プログラミングHELP!

    c言語でプログラムを組んでるんですが、どうしてもわからないものがありまして、 まず一つ目がキーボードから英小文字を一つ入力し、その文字を大文字に変換して出力するプログラミングです。結果がまずひとつの英小文字を入力して、入力した文字と、大文字に変換した文字を出力するプログラミングです。 ちなみにヒントは'a'=97,'A'=65です 二つ目が二桁の16進数('41'から'49','50'から'59')を入力すると対応する文字を表示するプログラミングです。また、%xは使用しないこと。なお、入力に間違いはないものとする。(ヒントは入力は一つの数値か、二つの文字か?だそうです。) 結果は二桁の16進数('41'から'49','50'から'59')を入力して、文字コードの二桁の数字と文字を出力するプログラミングです。 お願いします。

  • 言語コードの2文字または、3文字または、3桁の数値コードの記述について

    普通言語コードを記述するとき、アメリカの英語だとしたら「en-us」となりますが、アルファベット3文字や3桁の数値のコードも使用できるのでしょうか? 例えば、アメリカの場合2文字は「us」、3文字は「usa」、3桁数値は「840」なので、言語コードをアメリカの英語とする場合、「en-usa」や「en-840」と記述してよいのでしょうか? 回答よろしくお願いします。

    • ベストアンサー
    • HTML
  • CRCの検定コードがどの文字でも同じになった!?

    C言語の初級者が質問します。 講義の課題で、「伝送誤り検出方式として巡回符号方式(CRC:Cyclic Redundancy Check)を使用した場合、送り側でアルファベット6文字の適当な単語を1文字ずつ入力した場合の検定コードを算出しなさい。生成多項式はCRC-16-CCITT(Xの16乗)+(Xの12乗)+(Xの5乗)+1を使用し、検定コードは2byteとする。 この課題に対し、一文字ずつ、検定コードを求めて合計6個の和を出して16進数で表現しようと考え、以下のプログラムを作りました。#include <stdio.h> #include <string.h> #include <stdlib.h> int main () { int t,s,i,m; int l; int flag; int crcReg[10]; // crcRegは一文字ごとのCRCの計算途中過程 res[]は一文字ごとのCRCの最終結果 char inData[6]; //文字列入力 int jyuroku[6]; int crcmax; printf("文字入力(6文字まで):"); gets(inData); // l=strlen(inData); for(i = 0;i < l; i++) { printf("%d番目は16進数で%X\n",i+1,inData[i]); // } printf("各文字の16進asciiは(0x必要か?)"); for(m = 0;m <l;m++) { printf("%d番目のascii:",m+1); scanf("%X", &jyuroku[m]); // } //**********************************(後半)********************************************** for(s=0;s < l; s++) {//文字の数だけ繰り返し crcReg[s]=0xFFFF; //CRCの初期値はどの文字の場合でも同じ printf("%d 番目の16進ascii:%X\n",s+1,jyuroku[s]); // for (t = 0;t < 8; t++) { //入力する16進数は8ビット=1バイト ゆえ8回繰り返し flag = (crcReg[s] ^ jyuroku[s] & 0x01); // 生成多項式をかけるかどうかの判定の前段階 crcReg[s] = crcReg[s] >> 1; //CRCの計算過程を1ビット右にシフト if (flag == 0x01) { //最下位ビットflagが1の時の処理 crcReg[s] = (crcReg[s] ^ 0x8408); //生成多項式は10進数で } else if (flag == 0x00) { } jyuroku[s] = jyuroku[s] >> 1; // asciiコードも1 ビットシフト } printf("CRCの結果は%X\n",crcReg[s]); // } crcmax = crcReg[0]+crcReg[1]+crcReg[2]+crcReg[3]+crcReg[4]+crcReg[5]; printf("\n kekka:%d",crcmax); // return 0; // } しかし、こうするとcrcReg[s](検定コード)がどの文字の場合でも同じ255(16進数ではFF)になって、6文字の単語は常に和が1530になってしまいます。255=16の2乗-1であることが問題解決の鍵だと思うのですが、何か問題点わかりますか?

  • C++で16進数の文字コードから文字を表示する

    現在C++を習得しようとテキストを使い練習中なのですがC++で16進数の文字コードから文字を表示するプログラムを作れという問題で一通りできる様にはなったのですが リビルドしたときは正常終了するのですがビルドの段階でデバッグエラーが発生してしまいます。 #include <stdio.h> int main(void) { char suuji; printf("2桁の16進数('41'~'49'、'50'~'59')を入力して下さい:\n"); scanf("%02x",&suuji); printf("文字コード「%02x」の文字は「%c」です。\n",suuji,suuji); return 0; } エラーの内容は画像を添付いたしました。 原因が何なのかが分からなくて困っております。 もしよろしければご指摘お願いします!

  • 日本語をコード化(16進数)→復元に問題はないですか?

    フォームから入力された日本語(氏名)をコード化する必要があるので、 for(var i=0; i<moji.length; i++){ moji_code += (moji.charCodeAt(i).toString(16)) + ":"; } と、コード化しています。 例:日本太郎 → 65e5:672c:592a:90ce 1文字あたりのコードをなるべく短くする必要があるので16進数にしています。 コード化された日本語を復元する必要もあるのですが、ここで疑問が湧きました。 16進数にすると4桁になりますよね? 16進数自体をよく理解していないのですがString.fromCharCodeで復元しても問題ないのでしょうか? 問題というか、復元したら違う文字になったりはしないものなのでしょうか? 30文字ほど試したところ、違う文字になったことはありませんでしたが心配になり投稿しました。 また、上記のように16進数化したとき、日本語は必ず4桁になるのでしょうか?(こちらの都合上、5桁や6桁になることがあると問題があるので)

  • C言語で16進数の文字コードを文字列に変換

    16進の文字コードを入力してそれに対応する文字列を出力したいのですが 文字列から16進コードに変換出来ても16進コードから文字列に変換することが出来ません。 参考になるコードかサイト、または何かヒントがございましたらよろしくお願い致します。

  • 文字コードによる表記

    非常に初心者的な質問なんですが、 文字コードのS-JISで「、」を表記する場合、 「0x8140」と表記するのが正しいのでしょうか? xの部分は区数を入れるのか、そもそも0xの部分は必要なのか 調べてもよくわかりませんでした。 どうかお願いします。

  • 文字コードとWindowsOS

    海外(米国)のソフトウェアを購入しようと考えておりますが、Windows95, Windows98やWindowsMEは OSの設定で正しく使えるでしょうか? NTは? 確か、Windows2000やXP(home/pro)はUnicode対応や、Unicode以外のコードでも地域と言語オプションで 対応できると聞いたことがありますが、根本的にWindows2000未満は海外のソフトを使うのは 文字コードの問題で、見た目(ダイアログボックス)表示以外に 動作(数値やデータ)に不具合が発生するので避けたら良いということでしょうか?

  • VBで全角文字の上位コードを取得するには?

    今までC言語で以下のようなソースで動いていたプログラムがあります。 int main(void) {  FILE *fp1;  char str1[]="ABCあ"; char str2[]="XXX";  fp1 = fopen("aaaa.txt", "w");  fprintf(fp1, "%-4.4s%3s\n",str1,str2);  fclose(fp1); } 上のプログラムの実行結果は「ABC9XX」になります。 これは、printf関数で変数str1の4文字目が全角文字の「あ」であるのに %-4.4sが指定されているため、「あ」の上位コードと str2の1文字目のXの文字コードが連結されてしまい、 文字化けしてしまっているようです。 「ABCあ」の文字コード A=41H, B=42H, C=43H, あ=82H,AOH 「XXX」の文字コード X=58H, X=58H, X=58H 出力結果 ABC9XXの文字コード A=41H, B=42H, C=43H, 9=82H,58H, X=58H X=58H 今回このプログラムをVBに置き換えることになったのですが、 出力されるデータは今までプログラムとまるで同じにしてほしい (つまり、今まで文字化けしてるところは 文字化けした形で出力してほしい)の依頼があったため、 Format関数やLeftB関数を使って なんとかプログラムを書いてみたのですが、 うまく動作しません。 うまい対処法があれば教えてください。 宜しくお願いします。

  • 文字コード 16進表示ツール

    ファイル全体の文字コードを euc→s-jisへ変換するツールはよくあるのですが, 入力した文字について eus,s-jis等での16進数表示をしてくれるツールはあるのでしょうか.

このQ&Aのポイント
  • IP1002のエラー表示が出てひかりTVが見れない問題について、再起動やルーターとチューナーの接続確認などの試みをしたが改善されない状況です。
  • また、チューナーの電源がオフにならず点滅し続ける問題も発生しています。
  • 相談窓口への連絡もつながらないため、解決策を求めています。
回答を見る