アカウント名:
パスワード:
> C/C++を触っているプログラマーなら
じゃあ他の言語のプログラマーはEBCDICコードでも使ってるのでしょうか?ASCIIコードは言語に依存しないですよ。(ISO8859でも、Unicodeでも、16進数でいう20、10進数でいう32はスペースですからねえ)。
他の言語というか, それなりに抽象化が進んだ高級言語なら同一のデータが多義的に取り扱われるってことはありませんから.
そういう高級言語では文字はいかなる場合でも文字でしかありませんし, バイナリデータはバイナリデータとして取り扱われます. 共用体を使えば同一の記憶空間を複数のデータ種別で取り扱うことが可能ですが, これについても高級言語では共用体に格納されているデータ種別を管理していて誤操作を防ぐようになっていたりしますから. それに比べればCなんかだと共用体の型管理は無いし, それどころか型キャスト一発でどんなデータも変換できるとか, char型にしても根本的に文字ではなくて8bitのバイナリデータに過ぎないとか
そういう意味からすれば, ASCIIだろうがEBCDICだろうが文字コードという発想に至るだけで, それなりにCの様な低級言語/システム記述用言語なりアセンブラなりに親しんでいると思ってよいでしょう.
言語使用上は8ビットと定義されているわけでもないしなぁ。ではおまえは何者なのだ!>char
#ギターを弾く人ではない
ではおまえは何者なのだ!>char
何者、といわれましても、たかがbyteに過ぎません。
今はISO/IEC 646 IRVと同一なので。IRVが何の略かはご存じですよね?
じゃぁC/C++プログラマーがEBCDICコードを使ってることはないのでしょうか?C/C++は文字コードに依存しないですよ。\0の値は0とは限らないですよ!あと、EBCDICコードって書くとコードコード。
いや、さすがに\0は0ですよ。八進法で文字コードの値を指定するエスケープシーケンスですから。
おれが16進数を覚えたのはMSX-BASICでスプライトのパターンを作るためだったはず。2進数の方が直感的だろうけど、かったるいし。ASCIIコードも、だいたい覚えてた。いまは忘れたけど。次に16進数を触ったのはマシン語をハンドアセンブルでやったときかな。Cを勉強したのはずっと後になってから。
COBOLだと0x20は'0'で' 'は0x40だそうです。
# もうやだこの会社
私自身の精神衛生のために聞きますが、あなたはプログラマ職では無いですよね?
いまどきバッファオーバーランでメモリの破壊なんか経験してるのは C/C++ プログラマーくらいだよね、って意味じゃないかなぁ
#そんなことはない
フレームワークなんかがトラブル防止のために0x00をエスケープして消しちゃうシステムも普通にあったりします。クレジット会社のシステムに連結するところにそんなのが組み込まれてる可能性も否定できないでしょう。(バージョンアップでセキュリティ対策としてそんな仕様変更が組み込まれ、技術者がその辺を理解しないままバージョンアップしちゃった、とか普通にあり得ます。)
ついでに、送られてきた情報のバイト数を見て「文字列なのか数値なのか」を判断するようなシステムも実際に日本の某銀行では稼働していたりするので、例えば
0x31 0x00 0x30 0x00(UTF-16LEの文字列で「10」)
が、0x00をエスケープされた結果
0x31 0x30 となり、バイト数が2バイトしかなかった為に「整数型」と判断された挙げ句、「12592(10)」と解釈される、等と言うことはあってもおかしくありません。(「2バイトの時は整数型、それ以上なら文字列として扱う」なんて仕様が本当にあったりする。もちろん「文字が1文字だけ送られてくることは仕様上ありえない」のが前提。)
さて、どっちが馬脚なのやら。
# 上に書いた「某銀行」の中の人なのでAC# 仕様として正しいとは思わないけどね、自分も。
どうでもいい枝葉末節にそんな長文で突っ込んで、何か楽しいのかな?「それはasciiとUTF-8だけなので注意。UTF-16では0x20 0x00になったりします」と1行書けば済むのに。
その枝葉末節をおろそかにするところにバグは潜むわけで強調したくなる理由はわかる。
#ところで引用分までいれて空白込みの238文字(引用抜き空白込みで163文字)って長文か?#楽しいかどうかは本人次第だろうし、丁寧に例まで挙がってて私には#1607108よりは「参考になる」よ?#馬脚云々は余計かもしれないけど、コメント全体としては「フレームのもと」とは思えないな。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
ソースを見ろ -- ある4桁UID
16進数の20はC/C++に特有なのか? (スコア:0, フレームのもと)
> C/C++を触っているプログラマーなら
じゃあ他の言語のプログラマーはEBCDICコードでも使ってるのでしょうか?
ASCIIコードは言語に依存しないですよ。(ISO8859でも、Unicodeでも、
16進数でいう20、10進数でいう32はスペースですからねえ)。
Re:16進数の20はC/C++に特有なのか? (スコア:1)
他の言語というか, それなりに抽象化が進んだ高級言語なら同一のデータが多義的に取り扱われるってことはありませんから.
そういう高級言語では文字はいかなる場合でも文字でしかありませんし, バイナリデータはバイナリデータとして取り扱われます. 共用体を使えば同一の記憶空間を複数のデータ種別で取り扱うことが可能ですが, これについても高級言語では共用体に格納されているデータ種別を管理していて誤操作を防ぐようになっていたりしますから. それに比べればCなんかだと共用体の型管理は無いし, それどころか型キャスト一発でどんなデータも変換できるとか, char型にしても根本的に文字ではなくて8bitのバイナリデータに過ぎないとか
そういう意味からすれば, ASCIIだろうがEBCDICだろうが文字コードという発想に至るだけで, それなりにCの様な低級言語/システム記述用言語なりアセンブラなりに親しんでいると思ってよいでしょう.
charは8ビットですらないかも (スコア:2, おもしろおかしい)
言語使用上は8ビットと定義されているわけでもないしなぁ。
ではおまえは何者なのだ!>char
#ギターを弾く人ではない
屍体メモ [windy.cx]
Re: (スコア:0)
Re: (スコア:0)
何者、といわれましても、たかがbyteに過ぎません。
Re: (スコア:0)
Re: (スコア:0)
#include <limits.h> して CHAR_MAX と CHAR_MIN を見ないと分からない,が正解かな.
CHAR_BIT は標準でしたっけ?
Re: (スコア:0)
h:マスターマインドフレア
a:兵隊蟻
r:ドブネズミ
Re:16進数の20はC/C++に特有なのか? (スコア:1, すばらしい洞察)
American Standard Code for Information Interchangeの略称だって忘れちゃったんですか?
Re: (スコア:0)
今はISO/IEC 646 IRVと同一なので。
IRVが何の略かはご存じですよね?
Re:16進数の20はC/C++に特有なのか? (スコア:1, おもしろおかしい)
じゃぁC/C++プログラマーがEBCDICコードを使ってることはないのでしょうか?
C/C++は文字コードに依存しないですよ。\0の値は0とは限らないですよ!
あと、EBCDICコードって書くとコードコード。
Re: (スコア:0)
いや、さすがに\0は0ですよ。八進法で文字コードの値を指定するエスケープシーケンスですから。
Re: (スコア:0)
おれが16進数を覚えたのはMSX-BASICでスプライトのパターンを作るためだったはず。
2進数の方が直感的だろうけど、かったるいし。
ASCIIコードも、だいたい覚えてた。いまは忘れたけど。
次に16進数を触ったのはマシン語をハンドアセンブルでやったときかな。
Cを勉強したのはずっと後になってから。
Re: (スコア:0)
COBOLだと0x20は'0'で' 'は0x40だそうです。
# もうやだこの会社
Re: (スコア:0, フレームのもと)
私自身の精神衛生のために聞きますが、あなたはプログラマ職では無いですよね?
Re: (スコア:0)
いまどきバッファオーバーランでメモリの破壊なんか経験してるのは C/C++ プログラマーくらいだよね、って意味じゃないかなぁ
#そんなことはない
Re:16進数の20はC/C++に特有なのか? (スコア:3, 興味深い)
フレームワークなんかがトラブル防止のために0x00をエスケープして消しちゃうシステムも普通にあったりします。クレジット会社のシステムに連結するところにそんなのが組み込まれてる可能性も否定できないでしょう。
(バージョンアップでセキュリティ対策としてそんな仕様変更が組み込まれ、技術者がその辺を理解しないままバージョンアップしちゃった、とか普通にあり得ます。)
ついでに、送られてきた情報のバイト数を見て「文字列なのか数値なのか」を判断するようなシステムも実際に日本の某銀行では稼働していたりするので、例えば
0x31 0x00 0x30 0x00(UTF-16LEの文字列で「10」)
が、0x00をエスケープされた結果
0x31 0x30 となり、バイト数が2バイトしかなかった為に「整数型」と判断された挙げ句、「12592(10)」と解釈される、等と言うことはあってもおかしくありません。
(「2バイトの時は整数型、それ以上なら文字列として扱う」なんて仕様が本当にあったりする。もちろん「文字が1文字だけ送られてくることは仕様上ありえない」のが前提。)
さて、どっちが馬脚なのやら。
# 上に書いた「某銀行」の中の人なのでAC
# 仕様として正しいとは思わないけどね、自分も。
Re: (スコア:0)
どうでもいい枝葉末節にそんな長文で突っ込んで、何か楽しいのかな?
「それはasciiとUTF-8だけなので注意。UTF-16では0x20 0x00になったりします」
と1行書けば済むのに。
Re:16進数の20はC/C++に特有なのか? (スコア:1)
その枝葉末節をおろそかにするところにバグは潜むわけで強調したくなる理由はわかる。
#ところで引用分までいれて空白込みの238文字(引用抜き空白込みで163文字)って長文か?
#楽しいかどうかは本人次第だろうし、丁寧に例まで挙がってて私には#1607108よりは「参考になる」よ?
#馬脚云々は余計かもしれないけど、コメント全体としては「フレームのもと」とは思えないな。
Re: (スコア:0)