No.4ベストアンサー
- 回答日時:
文字コードには様々な種類があって、その一つがShiftJISです。
ShiftJISでは、半角文字=1Byte、全角文字=2Byteで表します。C言語で16進数を表すにはプレフィックスに"0x"を付けます。
int a = 10; // aには、数値の10が入ります
int b = 0x10; // bには16進数の10(つまり16)が入ります。
char型には1Byteのデータを格納することができます。下は、半角文字の'A'をchar型に格納しています。'A'の文字コードは0x41ですので両方とも同じ意味になります。
char x = 'A';
char x = 0x41;
次に、全角文字を格納する場合、2バイトの領域が必要になります。この領域に「、」を入れようとした場合、次のようになります。
char multi[2];
multi[0] = 0x81;
multi[1] = 0x40;
話が長くなりましたが、
(1) "0x"は16進数を表すために必要。
(2) 表記は0x8140でも問題なし。
ただし、実際には0x81、0x40のように分割して格納が必要。
と言うことになります。
>ShiftJISでは、半角文字=1Byte、全角文字=2Byteで表します。
その項目すら知りませんでした・・・。
自分の勉強方法を考え直します。
詳しい説明ありがとうございました!
No.3
- 回答日時:
文脈に因りますね。
もともとC言語のchar型は基本的に8ビットでS-JISの文字コードを保管するには足りません。
使っている処理系(コンパイラやライブラリなど)でshort型などでS-JISの1文字を表現するような処理になっているところなら0x8140のような表記でも良いでしょうが、char配列で扱うなら{0x81, 0x40}や"\x81\x40"のように1バイトずつ区切って扱わなければいけないでしょう。
No.2
- 回答日時:
C言語のソース中の話だよね?
C言語では「0x」は、これに続く数値が16進数である事を表している。これは言語仕様というものだ。例えば
・「5555」は五千五百五十五 (十進数)
・「05555」は二千九百二十五 (八進数)
・「0x5555」は二万一千八百四十五 (十六進数)
という風にソースプログラム中に書かれている「数文字」をコンパイラにどう解釈してもらいたいかを指定するために0や0xをつける。
さて次に、様々なコンピュータシステムで文字を表示するための「文字コードとフォント」という2つの概念を理解する必要がある。
文字コード、正確には文字エンコーディングというものは、コンピュータ上で、ある文字をある数値に割り振ろうというもので、日本語ではJIS、区点、Shift JIS、EUC-JPなどがある。
君が言うShift JISでは、十六進数で言う8141という数値に「、」が割り振られているようだ。
これを画面上に出すのがフォントで、例えば8141は確かに「、」だが、フォントのこの番号に「○」なんていう「絵」を入れても良いわけだ。コンピュータが認識するのは数値やけど、画面に表示されて人間が認識するのは絵やからね。
つまり、「SJISで「、」を表記する」というのは、目的によって変わる。画面上に出したいのか、ネットワークに流したいのか、ファイルに保存したいのか、文字列中の区切りとして認識したいのか。
何をしたいのか、もう少し詳しく教えてもらえるかな?
詳しい解説痛み入ります。
これは、格文字コードで名前などを表記するのにどう文字コードを使うといいか、
と思いこの質問にいたりました。
「、」は例えの話で聞かせていただきました。
それと、
> これを画面上に出すのがフォントで、例えば8141は確かに「、」だが、フォントのこの番号に「○」なんていう「絵」を入れても良いわけだ。コンピュータが認識するのは数値やけど、画面に表示されて人間が認識するのは絵やからね。
の項目で思ったんですが、これは8141に○をつけても結果的に表示されるものは変わりないということでしょうか?
もう1つ、
> つまり、「SJISで「、」を表記する」というのは、目的によって変わる。画面上に出したいのか、ネットワークに流したいのか、ファイルに保存したいのか、文字列中の区切りとして認識したいのか。
の
>ネットワークに流したいのか、ファイルに保存したいのか
の部分がどうも把握できません。
そもそもの文字コード使いどころがわかってないのだと思います。
プログラムで
printf(”%c”,a);
こういう時に使われるくらいしか思い出ません。
重要な点があるというのなら、
教えてくださると本当に助かります。
どうかよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- その他(プログラミング・Web制作) COBOL数値転記をCOPY句内での仕様 6 2022/06/15 18:48
- HTML・CSS HTMLの条件によって表示方向が切り替わる実装のコードを教えて下さい。 (コードは下記リンクを参照) 1 2022/09/25 14:35
- その他(プログラミング・Web制作) ワードプレスのプラグインであるAddQuicktagを使いたいが… 3 2022/04/18 15:03
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- Excel(エクセル) エクセルの数式で教えてください。 5 2023/02/10 15:11
- その他(言語学・言語) ロシア語について質問です。至急です。 3 2022/03/23 11:07
- C言語・C++・C# S-JIS → JIS コード変換するには 3 2023/02/09 23:55
- WordPress(ワードプレス) WordpressでYouTubeの埋め込みができない。 1 2022/10/26 01:08
- JavaScript [再掲]指定したパスが現URLに含まれていたら特定要素を削除するJavascriptのコードについて 1 2023/05/10 15:09
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA-DLLの引数受け渡しについて
-
%dなどの違い
-
C++で入力した文字列から数字を...
-
バイナリファイル中の日本語文...
-
Shift_JIS(16進)を文字に変換す...
-
アルファベットをカウント、
-
C言語の意味
-
コールバック関数
-
PIC18F26K22でsscanf関数を使い...
-
引用符と二重引用符
-
C言語 ファイル読み取りに対す...
-
char型配列の最大要素数
-
ポインターのポインターについ...
-
自作関数を用いた文字の反転
-
_tcscpy_s(wcscpy_s)の第二引数...
-
C言語で文字配列の問題がわかり...
-
16進数を2文字ずつ配列に格納し...
-
WSH(VBS)でJSONの文字列を読み...
-
数字の入った配列をファイルへ...
-
nullと""、\\0とEOFの違いにつ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムによく出てくるst...
-
nullと""、\\0とEOFの違いにつ...
-
TCL言語で文字列検索方法を教え...
-
C#でstringをポインタとして渡す
-
C++で入力した文字列から数字を...
-
%dなどの違い
-
WSH(VBS)でJSONの文字列を読み...
-
16進数を2文字ずつ配列に格納し...
-
シリアル通信で0x00を送信した...
-
_tcscpy_s(wcscpy_s)の第二引数...
-
構造体→文字列→構造体 をする方法
-
VBA-DLLの引数受け渡しについて
-
[C++]WCHARの1文字目しか表示で...
-
数字の入った配列をファイルへ...
-
VB6.0でのバイナリデータの扱い...
-
引用符と二重引用符
-
こんなことって可能なのですか...
-
char型配列の最大要素数
-
sprintf関数について教えて下さ...
-
C言語の課題で困っています;
おすすめ情報