• ベストアンサー

int型の内容をbyteの配列にコピー

int型の内容をbyteの配列にコピーする方法を教えて下さい。 int i_value = 500; byte[] by_value; by_value = new byte[4]; // どのような処理が必要ですか? by_value[0]には、0x1 by_value[1]には、0xf4 と格納したいです。 数字→文字列→文字(byte)できたのですが…。 C言語の場合、memcpy関数で型が異なってもキャストすれば回避できました。 JAVAでの方法を教えて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.2

とりあえず私の環境では キャストしないとエラーになりました。 by_value[0] = (byte)(i_value & 0xff) ; by_value[1] = (byte)((i_value>>8) & 0xff) ; by_value[2] = (byte)((i_value>>16) & 0xff) ; by_value[3] = (byte)((i_value>>24) & 0xff) ;

asaichi
質問者

お礼

キャストも必要でしたね。 忘れないように気をつけます。

その他の回答 (2)

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.3

>リトルエンディアンなのかビッグエンディアンなのか解らないので、 >C言語では、この問題に遭遇しましたが、JAVAではどうなのですかね? というかCPUに依存します。 intel系だとリトルエンディアン sun系だとビッグエンディアン 異なるCPU間で同じ結果をもたらしたいのなら 先にintel系かどうかを判定するか シフト演算子は使わず、数学的に 対処するのが懸命です。 b[0] = (byte)(i_value / 0xff) b[1] = (byte)(i_vakue % 0xff)

asaichi
質問者

お礼

本題とは異なりますが、ありがとうございます。 JAVAでもCPUに依存するのですね。 C言語だと、環境が異なったら再コンパイルしていました が、JAVAでは、最コンパイルというのは、あまりしない ようなので、CPUがどの系統化を判断しなくてはならない のですね。 これについては調査し、不明点等があったら別途質問 させていただきます。 ありがとうございました。

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.1

こんにちは プログラム言語に依存しなくても良いのでは。 リトルエンディアンなのかビッグエンディアンなのか解らないので、 by_value[0] = (i_value&0xff) ; by_value[1] = ((i_value>>8)&0xff) ; by_value[2] = ((i_value>>16)&0xff) ; by_value[3] = ((i_value>>24)&0xff) ; または by_value[3] = (i_value&0xff) ; by_value[2] = ((i_value>>8)&0xff) ; by_value[1] = ((i_value>>16)&0xff) ; by_value[0] = ((i_value>>24)&0xff) ; ご希望に添う方で良いと思いますよ。 forループとか使っても良いですが、大した処理じゃないですね。 for (int i=0,j=0 ;i<4 ;i++,j+=8){   by_value[i] = ((i_value>>j)&0xff) ; } または for (int i=0,j=24 ;i<4 ;i++,j-=8){   by_value[i] = ((i_value>>j)&0xff) ; } ご希望に添っていなければごめんなさい。

asaichi
質問者

お礼

マスクという方法がありましたね。 ビット操作は、しばらく離れていたので忘れてました。 ありがとうございました。 >リトルエンディアンなのかビッグエンディアンなのか解らないので、 C言語では、この問題に遭遇しましたが、JAVAではどうなのですかね?

関連するQ&A