2009-08-18 41 views
0

將Java應用程序轉換爲C#時,我遇到了一個奇怪且非常煩人的代碼,這對於原始版本非常重要並且很有用。字節順序:將java字節轉換爲c#

byte[] buf = new byte[length]; 
byte[] buf2 = bout.toByteArray(); 
System.arraycopy(buf2, 0, buf, 0, buf2.length);; 
for (int i = (int) offset; i < (int) length; ++i) { 
    buf[i] = (byte) 255; 
} 

這是造成鑄造錯誤的部分是套入字節255的buf[i]:而在Java它工作得很好,因爲java.lang.Byte跨度從0到255,從.NET 0 System.Byte跨度爲254 由於此限制,在應用程序的C#版本的輸出是不是255,正如所料,緩衝區包含一套254

誰能給我一個可行的替代方案?

非常感謝您的支持。

+9

嗯,是什麼讓你覺得一個.NET字節不去255? – 2009-08-18 20:22:18

+0

http://msdn.microsoft.com/en-us/library/5bdb6693(VS.80).aspx - 範圍是255.代碼中是否還有其他內容? – 2009-08-18 20:27:50

+1

Java字節是有符號的,所以(字節)255是(字節)-1。不知道這是否會有所作爲。 – 2009-08-18 20:34:06

回答

3

我認爲你誤解了你的問題:.NET字節與其他人一樣是8位的。更好的方法是嘗試理解Java代碼試圖做什麼,然後找出C#中最乾淨的等價物。

1

我認爲這可能是因爲你正在將255整數文字轉換爲一個字節,而不是分配一個字節值。我建議您嘗試使用Byte.MaxValue來代替。 Byte.MaxValue有255

的值。例如:

buf[i] = byte.MaxValue; 

編輯:我錯了; (byte)255肯定評估爲255;我剛剛在VS中確認。必須做些什麼來改變代碼中的其他地方。

+0

」此常量的值爲255(十六進制0xFF)。「 – 2009-08-18 20:25:01

+0

我知道這一點。但他試圖將255是一個整數字面值轉換爲一個字節。我認爲* *可能會導致他一直看到的問題。我建議使用Byte.MaxValue,其值爲255,而不是使用演員表。我將編輯並澄清。 – Randolpho 2009-08-18 20:27:18

+0

不,您可以將255轉換爲字節。 – 2009-08-18 20:27:44

0

byte.MaxValue等於255

此常數的值是255(十六進制爲0xFF)。

0

MDSN

字節:

字節關鍵字表示,如下表中所示,其存儲值的整數類型。

  • .NET Framework類型:系統字節
  • 範圍:字節0到255
  • 尺寸:無符號8位整數