2013-07-14 66 views
-1

我需要這行的Java代碼:轉換此行的Java代碼到C#代碼

Integer.toString(256 + (0xFF & arrayOfByte[i]), 16).substring(1) 

轉換爲C#,因爲我不知道如何與「0xFF的」工作。

編輯 這是全碼:

MessageDigest localMessageDigest = MessageDigest.getInstance("SHA-256"); 
     localMessageDigest.update(String.format(Locale.US, "%s:%s", new Object[] { paramString1, paramString2 }).getBytes()); 
     byte[] arrayOfByte = localMessageDigest.digest(); 
     StringBuffer localStringBuffer = new StringBuffer(); 
     for (int i = 0; ; i++) 
     { 
     if (i >= arrayOfByte.length) 
      return localStringBuffer.toString(); 
     localStringBuffer.append(Integer.toString(256 + (0xFF & arrayOfByte[i]), 16).substring(1)); 
     } 
+0

它應該只是'0xFF',因爲AFAIK它太小,沒有設置MSB,所以不應該遇到任何'unchecked'的需要。 – hexafraction

+0

'0xFF = 255' ,,,, – johnchen902

+0

你至少能夠遵循代碼。你會發現0xFF是arrayOfByte [i]中的任何內容的掩碼。除非數組中的內容大於一個字節,否則我不會看到使用它的原因。 – asafreedman

回答

5

在該說明中,您可以在C#中執行此操作的實際方法如下。

String.Format("{0:x2}", arrayOfByte[i]); 

這非常類似於Java

String.format("%02x", arrayOfByte[i]); 

這是做他們在上面做什麼簡單的方法。

1

即Java表達式是一個符號字節轉換爲無符號,然後用補零爲十六進制。

你應該可以用C#編寫代碼。


FWIW,Java代碼給出了相同的答案是:

Integer.toString(256 + arrayOfByte[i], 16).substring(1) 

String.format("%02x", arrayOfByte[i]) 

這裏是如何的原創作品。子表達式

(0xFF & arrayOfByte[i]) 

相當於

(0xFF & ((int) arrayOfByte[i])) 

,其將一個符號數(-128到+127)到一個無符號字節(0到255)。原來的256 +的目的是爲了確保toString的結果將是3個十六進制數字。最後,前面的數字被刪除,留下一個零填充的2位十六進制數字。

+0

也給出了與此相同的答案。 String.format(「%02x」,arrayOfByte [i]) – Chase

+0

@Chase - 我到了那裏.... –