2013-07-14 2 views
-1

Мне нужна эта строка кода Java:Преобразовать эту строку Java кода C# код

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

преобразуется в C#, так как я не знаю, как работать с «0xFF».

EDIT Это полный код:

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, поэтому не нужно «неумело». – 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 - я туда добирался .... –

Смежные вопросы