我努力在C#和Java中獲得相同的Base64字符串如何在java中以無符號方式將字節數組轉換爲Base 64字符串?
我希望Java在轉換爲Base64時將字節視爲無符號字節。
這裏是我的C#代碼
private static void Main(string[] args)
{
long baseTimeStamp = 1501492600;
byte[] bytes = BitConverter.GetBytes(baseTimeStamp * 114);
for (int i = 0; i < bytes.Length; i++)
{
bytes[i] = (byte)(bytes[i] >> 2);
}
string base64 = Convert.ToBase64String(bytes);
Console.WriteLine(base64);
}
在Java中,我想獲得相同的Base64相同long
值
下面的代碼
public static void main(String[] args) {
long myLong = 1501492600;
byte[] bytes = longToBytes(myLong);
for(int i = 0; i < bytes.length/2; i++)
{
int temp = bytes[i];
bytes[i] = bytes[bytes.length - i - 1];
bytes[bytes.length - i - 1] = (byte) temp;
bytes[i] = (byte)((bytes[i] >> 2));
}
System.out.println(DatatypeConverter.printBase64Binary(bytes));
}
private static byte[] longToBytes(long x) {
ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES);
buffer.putLong(x);
return buffer.array();
}
我試用過評論的方式,和DatatypeConverter
的方式,但我得到不同的字符串值。有沒有標準的JDK方式,還是應該編寫我自己的base64方法來將字節視爲未簽名的方式?
Base64不關心「signed」或「unsigned」。我想問題是你正在轉換不同的字節數組,所以你可能會在'longToBytes'中找到問題的根源 - 不管做什麼。 –
由於C#中的'''是邏輯移位,因此您需要執行'bytes [i] =(byte)((bytes [i]&0xff)>> 2)'以便對Java執行相同操作。 – saka1029
我試過我們的,但它只適用於當我分配給一個int時,當我分配給一個字節,我再次失去無符號行爲 – Carmine