CASLIIの数値データ入出力について

このQ&Aのポイント
  • CASLIIの数値データ入出力において、JISの文字コード表の値が使用されます。16進数の数値で表される文字には、定数(0030)を減算することで内部コードが得られます。
  • 例えば数字の'5'の内部コードは(0035)で、16進数の数値は(0005)です。文字コードの差は16進数の定数(0030)です。
  • しかし、アルファベットの'A'の内部コードは(0041)です。16進数の数値は(000A)であり、文字コードの差は16進数の定数(0037)です。なぜここで(0037)になるのか、詳細な過程を教えてください。
回答を見る
  • ベストアンサー

CASLIIの数値データ入出力

入出力のときはJISの文字コード表の値が使われ、それ以外の計算などにおいては通常の2進数が使われるとのことですが、その変換はどのように行うのでしょうか。 テキストには「1~9の文字には16進数の(0030)を減算」「A~Fの文字には(0037)を減算」と書いてあります。 例えば ’5’は内部コードでは(0035)、 16進数の数値では(0005) 数値と文字コードの差は16進数で(0030) というのは理解できます。 ただアルファベットになると理解できません。 例えば ’A’は内部コードで(0041) 16進数の数値では(000A) 数値と文字コードの差は16進数で(0037) なぜここで(0037)になるのでしょうか・・。 (0041)を(0037)で減算し、(000A)になるまでの過程を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • wanda1
  • ベストアンサー率100% (1/1)
回答No.2

文字→数値変換ですね。 説明が面倒ですが、内容はごく単純です。頭をやわらかくして。 0 = 文字コード(0030) - (0030) 1 = 文字コード(0031) - (0030) 2 = 文字コード(0032) - (0030) 5 = 文字コード(0035) - (0030) 9 = 文字コード(0039) - (0030) ここで、A = 文字コード - 0030 と同様にやりたいところですが、駄目です。 文字コード表を見ればわかる通り、1~9の文字コードとA~Fの文字コードは離れているので。(連続値として変換できない) A~Fは基準点になる0030という数値が変わってきます。 A = 文字コード(0041) - (0041) + (000A) B = 文字コード(0042) - (0041) + (000A) F = 文字コード(0046) - (0041) + (000A) この、-0041+000A を計算してまとめると、-0037 A = 文字コード(0041) - (0037) となります。 こんな手法プログラム作成時に本当にやるのか!と言われそうですが、 使う人は使いますし、知っておいて損はないです。

tom0093
質問者

お礼

非常に分かりやすくて助かりました! 基本情報も無事高得点も取れて、たまたまこの文字コードに関する問題も出ました! ありがとうございました!

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.1

>数値と文字コードの差は16進数で(0030) >というのは理解できます。 0035 - 0005 = 0030 >なぜここで(0037)になるのでしょうか・・。 0041 - 000A = 0037 (10進だと、65 - 10 = 55 ) 全く同じ構造です。

tom0093
質問者

お礼

ありがとうございました!

関連するQ&A

  • 数値のパック10進数の変換について(vb6)

    こんにちは 現在、vb6で開発を行っております。 早速ですが、困っていることがあります。 データベースを読み込んで、その値をテキストファイルに出力しているのですが、ある項目(数値)だけパック10進数に変換して出力しなければなりません。 いろいろなサイトを調べた結果、 例:数値で432 は "0100001100101100" のように変換できることがわかりました。しかし、この時点ではただの文字列のためこの値をテキストファイルに出力しても意味がありません。パック10進数のコード(?)としてテキストファイルに出力するにはこの後、どのようにすればいいのでしょうか。 ご存じの方がいらっしゃれば、ご教授願えないでしょうか?

  • CASLIIについて

    私が受けている授業では、パソコンについて教えてくれる授業をしていたのですが パソコンについては、ほとんど初心者の私たちを対象に、いきなりCASLIIのプログラムくばって、聞こえない声で、見えない字で説明しだしました。 そして、みんなぽかーんとわからない顔をしているのに、いきなり課題を出してきました。 1、文字列”S3@jp”のASCIIコードを16進数で書きなさい。   最後にはUNIXの改行コードLFの16進数を追加しなさい。 2、”情報”の区点コードを調べて、そのJISコード、EUCコードを書き  なさい。 3、以下で文字列はC言語と同様に数0で終わらせるものとします。文  字列の先頭アドレスがGR1に与えられたとき、文字列の長さをGR0に  入れて返す関数を書きなさい。 4、文字列の中のindex(位置)は0からはじめるとします。   GR1が先頭アドレスのとき文字列中の”@”を先頭から探して、   そのindexをGR0に入れて返す関数を書け。   ただし、”@”が存在しないときはー1を返すものとします。 5、前の3,4を文字列”S3@jp”に対して実行して、結果を画面に表  示するプログラムを書きなさい。 期限は明日まで(6月22日)と無理難題です。 友達に聞いても、誰もわからない状態で、何からしらべていいのやら。 正直泣きそうです。 そこで、考え方やアドバイスやヒントや・・・ 正直いうと答えを教えてもらいたいです。 どうか力をかしていただけないでしょうか。

  • オペアンプμA741の入出力特性の直線性

    オペアンプ μA741 入力電圧がある値になると入出力特性が直線性を示さなくなるのはなぜですか?教えていただきたいです。 μA741の内部回路は画像の通りです。

  • c言語:ファイルの入出力

    2つの行列をファイルから読み込み、その積をファイルに出力するプログラムを 作りたいのですが、参考書を読んでもよくわからないので教えて頂きたいです。 テキストファイルの文字列のコピーなどは、参考書を見てできたのですが、 ファイル入出力を使った数値の計算がいまいち理解できませんでした。 注意点は以下の通りです。 ・ファイルはカンマ区切りのテキストファイルとし、入力ファイルはエクセルで作成。拡張子は.csv。 ・ファイル名はキーボードから入力できるようにする。 よろしくお願いします。

  • 文字列を文字コードの数値に変換する方法

    JISコードの日本語を含む文字列を、文字コードの数値に変換する方法がわからなくて困っています。とりあえずは文字列ではなく、1文字だけ変換することを目指してord関数を使ったんですが、1バイト文字はうまくいったのですが、2バイト文字だと思うような結果になりませんでした。 例)以下のように変換したいです。 「a」→「97」 「あ」→「9250」 どなたかいい方法や関数をご存じないでしょうか? ちなみに下記のように片っ端から試してみたのですが、思うような結果が得られませんでした。 $buf = mb_convert_encoding($_POST["string"], "JIS", "EUC-JP"); $jis_code1 = ord("$buf"); $jis_code2 = bin2hex("$buf"); $jis_code3 = urlencode("$buf"); $jis_code4 = intval("$buf");

    • 締切済み
    • PHP
  • 16進数の数値を変数に代入したい

    いつもお世話になっております。 文字コードを復号して文字列を出力したいのですが 以下のdecode_charクラスのコードの13行目でエラーになります。 解決方法ご存知でしたら、ご回答いただけないでしょうか よろしくお願いします。 例)文字列"82a0"を入力値する。 0x82を16進数の数値として変換したいが NumberFormatExceptionが発生。 ------------------------------------------------ class decode_char { public static void main(String arg[]) { String str_code = arg[0]; //入力値 String divice_code = ""; //入力値の2桁ずつの文字コード byte code_ary[] = null; //divice_codeの16進数整数 String maked_char = ""; //Shift_JISで復号した文字列 for(int i = 0 ; i < str_code.length() / 2 ; i++) { divice_code = str_code.substring(i * 2,i * 2 + 2); code_ary[i] = Integer.parseInt("0x" + divice_code); } try { maked_char = new String(code_ary,"Shift_JIS"); System.out.println(maked_char); } catch(Exception e) { System.err.println("error!"); } } }

    • ベストアンサー
    • Java
  • CASL1

    CASL1の問題でわからないものがありました。お手伝いいただけると助かります。問題に解説も載っていたので一緒に載せておきます。きっとそれほど難しくない問題なのでしょうが、CASLになれない為参考書を読んでもよく理解できません。。 10進入力と数字コード 入力 1~4個の10進数字の列。 出力 入力を正の10進数とみなしたときの2進表現。但し、有効数字のみを出力すること。 例:入力 2006[Enter] 出力 11111010110(メモリーの16ビット表現をそのまま出力した 0000011111010110は不可) 解説: (1)CASLの入出力はメモリー上の連続する領域(入出力バッファ)に文字データとして置かれた内容をINマクロ、OUT マクロでバッファの名前(先頭番地に付けたラベル)、バッファの長さを指定して行う。 (2)文字列を10進数として処理するためには、各文字が意味として0~9の数値をもつこと、各桁が10の冪乗の重みをもつことを理解する必要がある。前者では文字データから数値への変換(文字0~9に対するJIS の文字コードは連続しているので文字0に対するデータを引けば数値になる)し、後者では(それまでに処理した)上位桁の数値を10倍して次の新しい桁の数値を加えればよい。CASLには乗算の命令はないので2倍したもの(左1ビットシフト)と8倍(更に左2ビットシフト)したものとを加えればよい。 (3)数値を2進数字の列として求めるには1ビットずつ処理してシフトすればよい。例えば、1とAND を取ると最下位ビットが抽出される。

  • エクセルの数字表記について

    以前、コンピュータでは,文字としての数字と数値は別のものとお伺いしましたが、自分はオフィス系ソフトの初歩的(多分?レベル高くないです・・・)ユーザーなのでよく分からないのですが、セルの中に1と表示されていて、それが文字の場合と数字の場合があるとしますと(文字だと’とかつく時もあるけれど)その1という表示されたデータの内部的な情報つまり2進数表記とかはやはり文字扱いと数値扱いでは違うのでしょうか?つまり、見た目1でも内部的なビットの電子データとしては違う?それともディスプレイ表示の1には一つの テキストデータとしての情報があり、文字と数値の2つにリンクされているような感じなのでしょうか?数(文字であっても)のディスプレイ表示と内部データとの関係?のようなものがよく分かりません。又、単なるテキスト(アルファベットとか)であっても内部データの表示にはそれに対応するテキストデータがあって、ただ単にそれを表示するだけなのでしょうか?内部データ費を表示するには、表示用の別のデータが必要なのか、単純にデータに対応するテキスト文字が表示されるハード的な仕組みになっているのでしょうか?長くて申し訳ありません。素人なのでよく分かりません。

  • Photoshop テキストの数値

    Adobe Photoshopでテキストを拡大縮小して大きさを変えると、 添付画像のように数値が変になるのですが、 「B」や「C」のように壊れた数値を持ったテキストを 「A」のように正式な値を示したテキストにする方法はありますか? よろしくお願いします。

  • エクセル:数値をテキスト形式で揃えたい

    5~6桁の、英字と数字の混在したコードのついたデータが一万件ほどありまして、これを利用してピボットテーブルで処理しなければならないのですが、 いろんな人が処理するデータなので、数字のみの(アルファベットの混ざらない)コードの場合、数値のものとテキスト形式のものが混在していて、同じコードがテーブル上で別々になってしまいます。 数字のみでテキスト形式の場合、セルの左上に緑色の三角のエラーインジケータが付いて 「このセルにある数値が、テキスト形式か、またはアポストロフィで始まっています。」 とメッセージが出ますが、これが付いた状態のほうがソートしたときに英数字の混ざったものときれいに並ぶので、この状態で扱いたいのです。 どうやらセルの設定を文字列にして入力しただけではこの状態にならないようで、今は既存の三角のついたものと同じ数字を手作業で貼り付けたりしていますが、数値の入ったセルを一度にテキスト形式にする方法はあるでしょうか? (この逆のパターンだったら、範囲選択して左に出る◇に!のついた部分をクリックして「数値に変換する」を選べばよい話なのですが…。)

専門家に質問してみよう