X



C言語はバイトオーダー等のハードウェア構造を意識しなければ
0003デフォルトの名無しさん
垢版 |
2022/03/30(水) 12:31:33.83ID:fkeGWoGM
C言語使う時はいちいちバイトオーダーとかハードウェア構造を気にしないといけないの?
0008デフォルトの名無しさん
垢版 |
2022/03/30(水) 12:49:08.60ID:fkeGWoGM
うん。それは知ってる。
リトルエンディアン/ビッグエンディアンを気にしないと
C言語は書けないの?
0009デフォルトの名無しさん
垢版 |
2022/03/30(水) 13:23:16.55ID:gwqJN53A
普通に内部処理してりゃ関係ないけど
ディスクにデータ書き込む時に表面化するな
同じソースなのにエンディアンの違う機種には書き込んだファイルが読めない
0011デフォルトの名無しさん
垢版 |
2022/03/30(水) 13:35:18.87ID:L9hJPayk
同じことの別の言い方を聞いたときに「あ、そういうことか」と思うこともあるので
あえて >>9 と同じことを言ううと

たとえばファイルフォーマット
データヘッダとしてファイル内のアドレスとデータサイズが各DWORDで
書いてあったとする
これを直接読み書きして問題ないのはバイトオーダーが合ってる場合のみ
1バイトを超えるバイト列を扱う場合には意識する必要がある
0017デフォルトの名無しさん
垢版 |
2022/03/30(水) 14:39:07.84ID:+aXwEqsZ
意識するのはクロスコンパイル前提のドライバなど低レベルライブラリの開発かなぁ
0020デフォルトの名無しさん
垢版 |
2022/03/30(水) 15:08:00.97ID:fkeGWoGM
この人なんでC言語はバイトオーダーやハードウェア構造を意識しなければ
いけないからシェルスクリプトでやれって言ってるんでしょうか?

シェルスクリプトの範囲であればバイトオーダーや
ハードウェア構造なんて気にする必要ないですよね?
0021デフォルトの名無しさん
垢版 |
2022/03/30(水) 15:35:46.15ID:+aXwEqsZ
シェルスクリプトのレイヤー層では抽象化されてるから、ハード都合を意識せず記載できるから使えってことなんでね
0023デフォルトの名無しさん
垢版 |
2022/03/30(水) 17:26:54.33ID:gwqJN53A
いや確かにこいつの言ってることは怪しいけどさあ
そんないちいち揚げ足取りしてもどうにもならんでしょ
0024デフォルトの名無しさん
垢版 |
2022/03/30(水) 18:16:39.21ID:fkeGWoGM
まあ確かにソフトウェア業界には影響力はないわな
一部の騙された学生とか企業とかが苦しむ程度か
0025デフォルトの名無しさん
垢版 |
2022/03/30(水) 20:38:43.15ID:sFfsK7BI
C言語の標準入出力関数にはテキスト形式だけじゃなくなくてバイナリ形式で入出力を行うものが用意されているわけで、
バイトオーダーの問題を回避するためにテキスト形式の入出力だけを使うということ自体、バイトオーダーの問題を意識してるということではないだろうか?

この程度の簡単なプログラムでもバイトオーダーの影響で結果が変わってくるわけですよ
#include <stdio.h>
int main(){int a = 1; fwrite(&a, sizeof(a), 1, stdout);}
0027デフォルトの名無しさん
垢版 |
2022/03/31(木) 12:20:55.10ID:Nn45qqFI
組み込みだと普通に意識するやん
0029デフォルトの名無しさん
垢版 |
2022/03/31(木) 18:28:18.54ID:1zp5+ia0
組み込みなら〜とか便利な言葉だな
ストリーミングサーバなんかで使うエンコーダやデコーダなんかでもバイトオーダめちゃくちゃ意識するんだけどこれも組み込みなの?
0030デフォルトの名無しさん
垢版 |
2022/03/31(木) 18:39:19.71ID:jJxlTIZ+
いや、バイナリを扱う=バイトオーダーを意識するってことなんだから、
バイナリを扱わないならC言語でもバイトオーダーなんか意識しないでしょって話だよ
0031デフォルトの名無しさん
垢版 |
2022/03/31(木) 18:42:15.07ID:jJxlTIZ+
この人の論理が破綻してる所は
シェルスクリプト vs C 言語のどちらがいいかって話で
C言語はバイトオーダーを意識する必要があるって書いてるが
C言語だからって常にバイトオーダーを意識する必要があるわけじゃないんだよ
0033デフォルトの名無しさん
垢版 |
2022/03/31(木) 18:49:38.45ID:1zp5+ia0
>>30
別に>>1の元ネタのシェルスクリプトで業務アプリとかやるのには全く賛成できないんだけど、
「C言語はバイトオーダ等のハードウェア構成を意識しなければならない」というのは特に間違ってないだろう
C言語はバイナリ操作が手軽でそのまま標準関数で入出力できる言語なんだし、そのバイナリを取り扱う面倒をさけるためにテキスト入出力しかしないというのはバイトオーダを意識してるんだよ
0034デフォルトの名無しさん
垢版 |
2022/03/31(木) 18:49:43.81ID:14SAbWP9
C言語はハードウェアよりもOSを意識しないとダメなのがつらい
シェルスクリプトもそうだが
POSIXに準拠していても完全な互換性がないから
0035デフォルトの名無しさん
垢版 |
2022/03/31(木) 18:51:44.16ID:1XbTtNuk
>>33
> 「C言語はバイトオーダ等のハードウェア構成を意識しなければならない」というのは特に間違ってないだろう

そこだと切り取られても困る

C言語はバイトオーダ等のハードウェア構成を意識しなければならないから
シェルスクリプトを使いましょうと言っているが、
シェルスクリプトは元々バイナリが扱えないわけでシェルスクリプトで
出来る範囲であればC言語はバイトオーダーやハードウェア構成を意識する必要がない

シェルスクリプト vs C言語の話で、シェルスクリプトに有利な理由になってないという話
0037デフォルトの名無しさん
垢版 |
2022/03/31(木) 19:05:15.51ID:1zp5+ia0
シェルスクリプトは絶対にバイナリ処理ができないわけでないけど普通に書く分にはバイトオーダ依存の処理なんて実装されることはほぼ無い
しかしC言語は>>25みたいにバイトオーダ依存の処理が簡単に書けてしまうわけで、これがそもそもバイトオーダー依存する処理だってのもバイトオーダーを理解してる人にしかわかんないわけよ
それだからテキストだけ使えって言っても初心者はテキストとバイナリの違いだってはっきり理解できてない
そういう面倒事がC言語にはあるっていうのは別に間違っていないだろう?
0043デフォルトの名無しさん
垢版 |
2022/04/02(土) 10:18:05.54ID:E0DnQUo6
今時のマイコンほぼリトルエンディアンなんでほぼ意識しなくても良くなったかも
ARMもMIPSなどどっちにも変えられるけどリトル設定にしてることがほとんどみたいだし
ネットワーク機器なんかntoh()とか使うとビッグの方が効率良いのにリトルになっとる事が多かった
0044組み込み開発者
垢版 |
2022/05/07(土) 21:57:55.14ID:AU+CR0Z8
このスレを立てる背景がよくわからんが、OS上で動くC言語とほぼCPU真上で動くC言語は区別した方がいいよ。
OS上で動かす言語ならバイト云々なんて意識しなくてもどうにでもなる言語の方が需要あるし、ハードウェアレベルとなると逆にバイトオーダーレベルの細かい仕様は把握できないといけなくなる。

OSよりも下の階層レベルだと構造体のポインタに直接メモリ番地(数値)を代入してハードウェアを直接操作するコードはよくある
よって>>22の考えは違うと言わせてもらう
0045デフォルトの名無しさん
垢版 |
2022/05/07(土) 22:33:01.65ID:VIkA7BGO
OS上で動くアプリでも外部とファイルやネットワークでやり取りするならバイトオーダーを意識する場面もあるだろ
まあ最近はフレームワークやライブラリがよしなにやってくれてたりすることも多いけど
レスを投稿する


ニューススポーツなんでも実況