我很难在C#和Java
中获得相同的Base64字符串我希望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中,我希望为相同的long
值获得相同的Base64
这是代码
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
方式,但我获得了不同的String值。是否有标准的JDK方式,或者我应该编写自己的base64方法来将字节视为无符号的方法吗?
答案 0 :(得分:1)
Base64转换位。它不知道或不关心您是否将字节视为有符号或无符号。如果你得到不同的值,那么问题出在其他地方。
但是,由于您正在进行位移,因此您需要使用零填充版本>>>
而不是符号扩展>>
。这可能是你问题的根源。
DatatypeConverter
仍然是最简单的方法。