[過去ログ] 文字コード総合スレ Part12 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
37: デフォルトの名無しさん [] 2018/12/20(木) 13:46:21.36 ID:P4Rv6f7s(1) AAS
実行メモリ上はともかく
ファイルやネットワークストリームでLEにするアホいるんか?
38: デフォルトの名無しさん [] 2018/12/20(木) 16:58:53.93 ID:Epiz8Tj2(4/5) AAS
エンディアンもさることながら32/64bit整数の幅調節が厄介。
使っている言語が32/64bitどちら向けでビルドされたものなのかによって構造体メンバのアラインメントを適切に処理する必要が出てくる。
言い換えれば、C/C++で作った構造体をバイト列で渡し、C/C++以外の言語でバイト列を構造体に復元する処理が厄介。
単に構造体の64bit整数メンバだけ気を付けるのではダメで、構造体の全メンバのアラインメントそのものが大きく変わりうることに注意する必要がある。
39: デフォルトの名無しさん [sage] 2018/12/20(木) 18:26:27.50 ID:6OEKrw3R(1) AAS
いや、だからさ、その程度までは理解できてるのに、何故「C/C++だと構造体の各メンバ変数のアラインメントを意識しなくていいが」なんてことを言っちゃうの?
それとアラインメントの話とバイトオーダーの話を混同しないように気を付けた方がいいよ。
40: デフォルトの名無しさん [sage] 2018/12/20(木) 19:07:05.38 ID:oZOw2Nhk(1/2) AAS
C/C++しらないけど、魔法のようにアライメントを
勝手に調整してくれるんじゃないの?想像しただけで
41: デフォルトの名無しさん [] 2018/12/20(木) 21:19:19.38 ID:/Up9dRku(1/8) AAS
Unicodeは普通にリトルエンディアンもありだ
なんで Byte Order Mark(BOM) がファイルの先頭に入ってるのか分かってない
Javaバイトコードのcafe babeみたいな飾りだと思ってんの
リトルエンディアンの計算機ばっかりがあるとこで
ビッグエンディアンでファイルを保存する理由なんかないからな
当然、そういったコンテンツデータがHTTPでも流れてくる
42: デフォルトの名無しさん [] 2018/12/20(木) 21:20:17.21 ID:/Up9dRku(2/8) AAS
やっぱりこの板には
クルクルパーしかいない
そしてそのクルクルパーの声だけがでかい
やっぱりな低学歴知恵遅れは
この板から排除する必要がある
板が正常に機能しない
43: デフォルトの名無しさん [sage] 2018/12/20(木) 21:26:52.62 ID:gpCj1726(1/3) AAS
アライメントはふつうコンパイラが適切に調整してくれるよね。
32/64bitで整数サイズの違いでメンバオフセットが変わるってのはアライメントとは別の話。
44: デフォルトの名無しさん [] 2018/12/20(木) 21:31:46.95 ID:/Up9dRku(3/8) AAS
32bitなら
ちゃんと32bitに詰まるように
メンバの順序かえる
45(1): デフォルトの名無しさん [] 2018/12/20(木) 21:38:37.03 ID:/Up9dRku(4/8) AAS
char unko
char foo
int aho
short poi
char baka
int manuke
short boo
char woo
↓
int manuke
----
int aho
----
short poi
short boo
----
char unko
char foo
char baka
char woo
64bitでも考え方は同じ
強制パッキングのオプション使えるコンパイラもある
46: デフォルトの名無しさん [sage] 2018/12/20(木) 21:42:31.32 ID:oZOw2Nhk(2/2) AAS
今問題としてるのはファイルの話だ。
32bitシステムで作られたファイルを64bitシステムに
持ってきたとしてもファイルの内容が変わるわけじゃない
つまりC/C++で32bitでint型で扱っていたからと言って
64bitでもint型で扱ってはいけないということだ
47: デフォルトの名無しさん [] 2018/12/20(木) 21:44:56.46 ID:/Up9dRku(5/8) AAS
バカがよくやる誤りは
メモリ境界をまたぐ位置で64bit値を参照したりして
バスエラーを起こす
シリアライズデータを直に参照できると思ってるバカがあとをたたない
CISCの計算機しか使ったことないサル並の脳みそのヤツがよくやる
48: デフォルトの名無しさん [] 2018/12/20(木) 21:53:38.53 ID:/Up9dRku(6/8) AAS
そんなファイル読み込むときに
普通にintなんか使わないからな
そんなことは低学歴知恵遅れしか発想できない
utf16なら16bit単位(uint16_t)
utf32なら32bit単位(uint16_t)
で読み込む
リトルエンディアンの計算機で
ビッグエンディアンのUnicode読む場合は
16bit単位なら16bit単位でオクテット列の並びを逆転させる
32bit単位なら32bit単位でオクテット列の並びを逆転させる
リトルエンディアンの計算機で
リトルエンディアンのファイル読み込むならオクテット列の並びを逆転させる必要はない
ビッグエンディアンならその逆になる
低学歴知恵遅れはこういった基本的な理解がない
49: デフォルトの名無しさん [sage] 2018/12/20(木) 21:59:01.65 ID:gpCj1726(2/3) AAS
>>45
C/C++の規格じゃ構造体のメンバは宣言された順にアドレスが増加するよう並べられることになっている。
仮に>>45のような最適化を行うことができる処理系が存在したとしても、一般的と言えるものではない。
50: デフォルトの名無しさん [sage] 2018/12/20(木) 21:59:21.79 ID:KozHiIkR(1) AAS
one little two little three little endians
51: デフォルトの名無しさん [] 2018/12/20(木) 22:00:12.93 ID:/Up9dRku(7/8) AAS
だからそう書いてる
手動で自分で並べ替える
52: デフォルトの名無しさん [sage] 2018/12/20(木) 22:12:47.37 ID:gpCj1726(3/3) AAS
自分で並べ替えろって話か。それは勘違いした、すまん。
53: デフォルトの名無しさん [sage] 2018/12/20(木) 22:23:36.55 ID:tzmwAGAt(1/2) AAS
結局C/C++でもアライメント意識して、自分で適切な型を選択しているってわけさ
他の言語でも一緒。ただし型が違うからバイト数を指定するだけの話
54: デフォルトの名無しさん [sage] 2018/12/20(木) 23:02:54.77 ID:Epiz8Tj2(5/5) AAS
PGならば、楽するためにJava/C#/Python/Perl/Rubyなどを使ってたはずなのに、C++よりめんどくさくなって心が折れそうになる経験を一度はしておいたほうがいい。
55: デフォルトの名無しさん [sage] 2018/12/20(木) 23:23:21.93 ID:tzmwAGAt(2/2) AAS
いや、C++よりも面倒なことってないから
そんな経験するのは無理だよ
56: デフォルトの名無しさん [] 2018/12/20(木) 23:49:16.62 ID:/Up9dRku(8/8) AAS
やはり低学歴知恵遅れには
C++はむり
レスみればよく分かる
レスから頭の悪さがにじみ出てる
低学歴のレスはすぐにわかるわ
残念なことに
57(1): デフォルトの名無しさん [sage] 2018/12/21(金) 12:36:36.76 ID:C7PBMVlX(1) AAS
データのアラインメントはどんな言語を使うにしても気にする必要がある。
しかし、Windows が VisualC++ でビルドされていて、VisualC++
もしくは互換のアラインメントができる言語でアプリを組めば、
気にしなくてもよい、ということだけだろう。
58: デフォルトの名無しさん [sage] 2018/12/21(金) 14:56:12.53 ID:wVAQd9sY(1/3) AAS
>>57
gcc も同じだよ。64bit版linux gccはwchar_tを16ビットにするか32ビットにするかを切り替えビルドできるからさらに厄介。
構造体を丸ごとダンプしたバイナリデータを同じOS上の別プロセスに渡すのは繊細な注意がいる。
59: デフォルトの名無しさん [sage] 2018/12/21(金) 16:01:10.01 ID:2iFVCAc3(1/4) AAS
で、なんだっけ?バイナリファイルのデータが
16bitで格納されていようが32bitで格納されていようが
C/C++だったらアライメントを勝手に調整してくれるんだっけw
へー、勝手にねー、intで扱ってれば、勝手に調整してくれるんだーw
60: デフォルトの名無しさん [] 2018/12/21(金) 16:43:13.79 ID:wVAQd9sY(2/3) AAS
intが16bitの組み込み向けプログラムであっても同じコンパイルオプションで作ったモジュール同士ならバイナリの復元はC言語の型キャストだけで可能。
構造体が仕様として公開されている場合、どの言語であれアラインメントを意識した実装が必要になるが、C言語は実装コストが最も低くなる傾向はある。
スクリプト言語を使う人がアラインメントを意識せずにすんでいるのは、ライブラリ実装した人が頑張ってくれた・くれているおかげ。
61(1): デフォルトの名無しさん [sage] 2018/12/21(金) 17:01:59.77 ID:2iFVCAc3(2/4) AAS
一方他の言語では、指定したオフセットから何バイト読み込むか指定するだけなのであった
上下前次1-新書関写板覧索設栞歴
あと 941 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.013s