1
我傳遞C#&爪哇之間的數據,將它們轉換在4個階段:差異( 「UTF-8」)和Encoding.UTF8.GetBytes()的C#
- 到字節數組
- 字符串(簡單地增加每個字節爲字符)
- 到
UTF8
字節串
我已經發現了Java的轉換是UTF8不同於C#。
我將跳過下面代碼中的base64
轉換。
Java代碼:
// The result is [-26, 16, 0, 0]
byte[] bytes = ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putInt(4326).array();
StringBuilder sb = new StringBuilder(bytes.length);
for (byte currByte : bytes) {
sb.append((char) currByte);
}
// The result is [-17, -90, -66, 16, 0, 0]
byte[] utf8Bytes = sb.toString().getBytes("UTF-8");
C#代碼
MemoryStream objMemoryStream = new MemoryStream();
BinaryWriter objBinaryWriter = new BinaryWriter(objMemoryStream);
objBinaryWriter.Write(4326);
// The result [230, 16, 0, 0]
byte[] objByte = objMemoryStream.ToArray();
StringBuilder objSB = new StringBuilder();
foreach (byte objCurrByte in objByte)
{
objSB.Append((char)objCurrByte);
}
string strBytes = objSB.ToString();
objBinaryWriter.Close();
objBinaryWriter.Dispose();
// The result is [195, 166, 16, 0, 0]
var result = UTF8Encoding.UTF8.GetBytes(strBytes);
兩個端陣列儘管輸入的陣列/字符串相同是不同的。 (Java的只是用符號字節顯示 - 但值相同)
我不能改變的C#代碼,因爲它是已使用的客戶..
如何調整,什麼是我的java代碼中的問題?
注:Java的管理閱讀從C#的結果的base64字符串,但隨後它與同樣的數據不同的字符串,C#語言不能正常閱讀產生..
這麼簡單:)我真的忽略了符號/無符號的差異。我只是在我的頭上加256,並認爲每事情是一樣的..謝謝allot –
@RazizaO對'byte','char'和'short'的操作首先被加寬爲'int',如果你使用了一個強制轉換,這很容易被忽略。 –