intとbyteの相互回転longとbyteの相互回転
1893 ワード
1.int回転byte
2.byte回転int
3.byte回転long
4.long回転byte
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
big endianとは、最下位アドレスには最大有効バイト(MSB)が格納され、little endianは最下位アドレスには最下位有効バイト(LSB)が格納される. Big Endian
低アドレス高アドレス---------------------------------------+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++-++-+-++-++-++-+-+-++-+-+-++-+-++-++-+-++-++-++-+-++-+-++-++-+-++-+-++
Little Endian
低アドレス高アドレス--------------------------------+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++-++-+-++-++-++-+-++-+-++-+-++-+-++-++-+-++-++-+-++-++-+-++-++-+-++-+-++
public static byte[] int2bytes(int i) {
byte[] b = new byte[4];
b[0] = (byte) (0xff&i);
b[1] = (byte) ((0xff00&i) >> 8);
b[2] = (byte) ((0xff0000&i) >> 16);
b[3] = (byte) ((0xff000000&i) >> 24);
return b;
}
2.byte回転int
public static int bytes2int(byte[] bytes) {
int num = bytes[0] & 0xFF;
num |= ((bytes[1] << 8) & 0xFF00);
num |= ((bytes[2] << 16) & 0xFF0000);
num |= ((bytes[3] << 24) & 0xFF000000);
return num;
}
3.byte回転long
public static long bytes2long(byte[] b) {
long temp = 0;
long res = 0;
for (int i=0;i<8;i++) {
res <<= 8;
temp = b[i] & 0xff;
res |= temp;
}
return res;
}
4.long回転byte
public static byte[] long2bytes(long num) {
byte[] b = new byte[8];
for (int i=0;i<8;i++) {
b[i] = (byte)(num>>>(56-(i*8)));
}
return b;
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
big endianとは、最下位アドレスには最大有効バイト(MSB)が格納され、little endianは最下位アドレスには最下位有効バイト(LSB)が格納される. Big Endian
低アドレス高アドレス---------------------------------------+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++-++-+-++-++-++-+-+-++-+-+-++-+-++-++-+-++-++-++-+-++-+-++-++-+-++-+-++
Little Endian
低アドレス高アドレス--------------------------------+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++-++-+-++-++-++-+-++-+-++-+-++-+-++-++-+-++-++-+-++-++-+-++-++-+-++-+-++