2007-10-30 [長年日記]

_ [Life] あははは

なんだか本格的に忙しくなりそうな ヨ ☆ カ ☆ ン だなー

\(^o^)/

_ [C][Programming] char[4] から unsigned long へのキャスト

今まで知らなかったんですが。

char[4] の配列から unsigned long へキャストすると char[0] から LSB順に格納される。

例えば char[] = "0x11 0x22 0x33 0x44" を unsigned long にキャストすると 0x44332211 になる。

常識的に考えてみれば LSB 順に格納されるのは道理だと気がつくんだよね、たはは。

本日のツッコミ(全3件) [ツッコミを入れる]
_ odawara (2007-10-31 10:14)

忙しそうでなによりです(ニコニコ)ちなみにodawaraも忙しくなりそうです(ガクガグ)<br>char[4]からunsigned longへのキャストってどう記述するんですか?俺はいつもビット演算で処理しちゃうんですけど。<br>それと、0x44332211って並ぶのはリトルエンディアンだからですよね。PowerPCとかだと、0x11223344になるんじゃないかな(要確認)

_ Naruto (2007-10-31 10:51)

お互い死ぬぐらいに頑張りましょう。<br>あ、ちがった。<br>死なないように頑張りましょう。<br><br>> キャスト<br>ビッグエンディアンでの実験よろしく。<br><br>unsinged long が 4バイトと保証されているのならこんな感じでOKかと<br><br>char str[4]; // 何か入れとく<br>unsigned long num;<br>num = *(unsgined long*)str;<br>printf("num: 0x%x\n", num);<br><br>ビット演算というのはビットシフトで代入ということでいいのかな?

_ odawara (2007-10-31 12:46)

char str[4];<br>unsigned long num;<br>num = ((long)str[3] << 24) | ((long)str[2] << 16) | ((long)str[1] << 8) | (long)str[0];<br>近頃はunsigned longが64bitだったりするでしょうから怖いんですよね。組込だと、CPUがバイエンディアンだったりするので、結構気をつかいますよ。

[]

«前の日記(2007-09-30) 最新 次の日記(2007-11-01)»