long型→byte型に変換したいのですが、
下の①と②では何か違いはあるのでしょうか。
BYTE byData[sizeof(long)];
long lnum = 50432221;
①
memcpy(byData, &lDrvCnt, sizeof(long));
②
*(byData ) = (unsigned char)(lnum >> 24) ;
*(byData + 1) = (unsigned char)(lnum >> 16) ;
*(byData + 2) = (unsigned char)(lnum >> 8) ;
*(byData + 3) = (unsigned char)(lnum ) ;
初歩的な質問で申し訳ないですが、
ご教授下さい。
>memcpy(byData, &lDrvCnt, sizeof(long));
は、
>memcpy(byData, &lnum, sizeof(long));
と解釈しますね。
んで、やってみればすぐ分かりますよね。
何か違いがあるどころじゃありませんよね(笑)。
ちなみに、(1)がやりたいなら自分なら
*(( long *)byData) = lnum;
ってやりますけど(vv;)。
Q.違いがあるか
という質問に対する答えは Yes か No で終了だが、そういう Q&A をお望み?
結果は「違う」(少なくとも Visual C++ では)
なぜ違うか、どう違うか、あたりは [エンディアン] で調べてみると吉。
# endian であって indian ではないので注意
どちらが正しい、ないし、適切かは、何をしたいか次第で違う。
(1) (2) は処理系によらず状況によらず絶対 segv らないけど
仲澤 氏のコードは segv る可能性が0ではないので俺ならやらない。
# x86 限定なら問題ないけど...
わかりました。調べてみます。
ありがとうございました。
ツイート | ![]() |