色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

java 大端和小端轉換

錢衛國2年前8瀏覽0評論

計算機內存中的數據存儲方式有大端和小端兩種,它們的區別在于字節的存儲順序不同。Java提供了一些方法可以實現大端和小端之間的轉換。

大端存儲是指將高位字節存儲在內存的低地址處,低位字節存儲在內存的高地址處。例如,16進制數據0x12345678在大端存儲中就是以0x12、0x34、0x56、0x78的順序存儲的。

小端存儲則是將低位字節存儲在內存的低地址處,高位字節存儲在內存的高地址處。在小端存儲中,同樣的數據0x12345678就是以0x78、0x56、0x34、0x12的順序存儲的。

/**
 * 方法一:使用位運算進行轉換
 */
public static int bigEndian2Int(byte[] bytes) {
int result = 0;
for (int i = 0; i< bytes.length; i++) {
result += (bytes[i] & 0xFF)<< (8 * (bytes.length - i - 1));
}
return result;
}
public static byte[] int2BigEndian(int value, int length) {
byte[] result = new byte[length];
for (int i = 0; i< length; i++) {
result[i] = (byte) ((value >>(8 * (length - i - 1))) & 0xFF);
}
return result;
}
/**
 * 方法二:使用Java自帶的方法進行轉換
 */
public static int bigEndian2Int(byte[] bytes) {
return ByteBuffer.wrap(bytes).order(ByteOrder.BIG_ENDIAN).getInt();
}
public static byte[] int2BigEndian(int value, int length) {
ByteBuffer buffer = ByteBuffer.allocate(length);
buffer.order(ByteOrder.BIG_ENDIAN).putInt(value);
return buffer.array();
}

上述代碼演示了兩種方法實現大端到整型的轉換,在第一種方法中,我們使用位運算獲取每個字節并按照對應的順序組合起來,第二種方法則通過Java自帶的ByteOrder和ByteBuffer類實現轉換。

/**
 * 方法一:使用位運算進行轉換
 */
public static int littleEndian2Int(byte[] bytes) {
int result = 0;
for (int i = 0; i< bytes.length; i++) {
result += (bytes[i] & 0xFF)<< (8 * i);
}
return result;
}
public static byte[] int2LittleEndian(int value, int length) {
byte[] result = new byte[length];
for (int i = 0; i< length; i++) {
result[i] = (byte) ((value >>(8 * i)) & 0xFF);
}
return result;
}
/**
 * 方法二:使用Java自帶的方法進行轉換
 */
public static int littleEndian2Int(byte[] bytes) {
return ByteBuffer.wrap(bytes).order(ByteOrder.LITTLE_ENDIAN).getInt();
}
public static byte[] int2LittleEndian(int value, int length) {
ByteBuffer buffer = ByteBuffer.allocate(length);
buffer.order(ByteOrder.LITTLE_ENDIAN).putInt(value);
return buffer.array();
}

以上代碼演示了兩種方法實現小端到整型的轉換,與大端不同的是,小端轉換時需要將每個字節按照相反的順序組合起來。同樣地,在第一種方法中,我們使用位運算獲取每個字節并按照對應的順序組合起來,第二種方法則通過Java自帶的ByteOrder和ByteBuffer類實現轉換。