Пераўтварэнне Java хэш C # і трэба дапамагчы зразумець Java

Я пераўтварэнне бібліятэкі Java да C#, як я перапісаць успадкаванае дадатак, і мне патрэбна дапамога. Мне трэба зразумець, што гэтая лінія ў Java робіць:

sb.append(Integer.toHexString((b & 0xFF) | 0x100).substring(1,3))

і калі гэта C# радок эквівалентная

result += (Convert.ToInt32(b).ToString("x2") + " ").Substring(1,3);

In both cases b is a byte from a SHA-1 hash that the code is looping through. The Java part I don't understand is ((b & 0xFF) | 0x100). It looks like it's padding it?

Звычайна я хацеў бы параўнаць выхад з прыкладання Java з тым, што генеруе мой C#, але я не ў postition зрабіць гэта прама цяпер (і гэта мяне хвалюе - паверце мне).

0
«&» З'яўляецца пабітава лагічным «І», ён будзе правяраць кожны біт зменных пры параўнанні tutorialspoint .com/Java/java_bitwise_operators_examples.htm
дададзена аўтар Xinus, крыніца
«&» З'яўляецца пабітава лагічным «І», ён будзе правяраць кожны біт зменных пры параўнанні tutorialspoint .com/Java/java_bitwise_operators_examples.htm
дададзена аўтар Xinus, крыніца
Упс, выпраўляючы сябе: падрадок (1,3) дасць вам дзве апошнія лічбы, якія будуць нешта паміж 00 і FF. | 0х100 гэта спрытны трук, каб Integer.toHexString даць вам вядучыя нулі на працягу апошніх двух лічбаў, якія ён не ў адпаведнасці з яго Javadoc ...
дададзена аўтар Fildor, крыніца
Упс, выпраўляючы сябе: падрадок (1,3) дасць вам дзве апошнія лічбы, якія будуць нешта паміж 00 і FF. | 0х100 гэта спрытны трук, каб Integer.toHexString даць вам вядучыя нулі на працягу апошніх двух лічбаў, якія ён не ў адпаведнасці з яго Javadoc ...
дададзена аўтар Fildor, крыніца
б & 0xFF будуць маскіраваць нізкія байты, таму ўсе, што б, вы атрымаеце нешта паміж 0x00 і 0xFF. У выніку цэлага лік, дзявяты біт не ўстаноўлены, незалежна ад таго, што было раней. Такім чынам, вы будзеце мець нешта паміж 0x0100 да 0x01FF. З гэтага радка падрадок ад індэкса 1 да 3 абразаецца. Такім чынам, вы будзеце ў канчатковым выніку з радка, які нагадвае Hex значэнне паміж 100 і 1FF.
дададзена аўтар Fildor, крыніца
б & 0xFF будуць маскіраваць нізкія байты, таму ўсе, што б, вы атрымаеце нешта паміж 0x00 і 0xFF. У выніку цэлага лік, дзявяты біт не ўстаноўлены, незалежна ад таго, што было раней. Такім чынам, вы будзеце мець нешта паміж 0x0100 да 0x01FF. З гэтага радка падрадок ад індэкса 1 да 3 абразаецца. Такім чынам, вы будзеце ў канчатковым выніку з радка, які нагадвае Hex значэнне паміж 100 і 1FF.
дададзена аўтар Fildor, крыніца
Я лічу, што ToInt16 замест ToInt32 з б іх эквівалент, калі яны не эквівалентныя, і ў гэтым выпадку - не ведаю.
дададзена аўтар Dukeling, крыніца
Я лічу, што ToInt16 замест ToInt32 з б іх эквівалент, калі яны не эквівалентныя, і ў гэтым выпадку - не ведаю.
дададзена аўтар Dukeling, крыніца
Нарэшце дадому і можа прымаць/upvote (дурная праца сеткі). T045T - я дадаў прастору, таму што я не звярнуў увагу на тое, што я друкаваў.
дададзена аўтар Chuck, крыніца
Нарэшце дадому і можа прымаць/upvote (дурная праца сеткі). T045T - я дадаў прастору, таму што я не звярнуў увагу на тое, што я друкаваў.
дададзена аўтар Chuck, крыніца
Нарэшце дадому і можа прымаць/upvote (дурная праца сеткі). T045T - я дадаў прастору, таму што я не звярнуў увагу на тое, што я друкаваў.
дададзена аўтар Chuck, крыніца
З збеглага чытання, 0xAA стаў бы "1AA" у Java і "AA" ў C #. Але, можа быць, я нешта прапусціў.
дададзена аўтар Henk Holterman, крыніца
З збеглага чытання, 0xAA стаў бы "1AA" у Java і "AA" ў C #. Але, можа быць, я нешта прапусціў.
дададзена аўтар Henk Holterman, крыніца
Чаму вы дадаўшы прабел у радок перад выклікам падрадка?
дададзена аўтар T045T, крыніца
Чаму вы дадаўшы прабел у радок перад выклікам падрадка?
дададзена аўтар T045T, крыніца
Чаму вы дадаўшы прабел у радок перад выклікам падрадка?
дададзена аўтар T045T, крыніца

6 адказы

Вам не трэба мяняць арыгінал, які рэзка - З # эквівалент (мяркуючы, што «С.Б.» з'яўляецца StringBuilder) проста:

sb.Append(((b & 0xFF) | 0x100).ToString("x").Substring(1, 2));
2
дададзена
Дзякуй, гэта было менавіта тое, што мне было трэба. Я быў у стане знайсці каго-то з кодам бегам Java і пратэставаць прадукцыйнасць і ўсё узгодненае прыгожа. Hooray для модульных тэстаў! Дзякуй, Дэйв!
дададзена аўтар Chuck, крыніца

Вам не трэба мяняць арыгінал, які рэзка - З # эквівалент (мяркуючы, што «С.Б.» з'яўляецца StringBuilder) проста:

sb.Append(((b & 0xFF) | 0x100).ToString("x").Substring(1, 2));
2
дададзена
Дзякуй, гэта было менавіта тое, што мне было трэба. Я быў у стане знайсці каго-то з кодам бегам Java і пратэставаць прадукцыйнасць і ўсё узгодненае прыгожа. Hooray для модульных тэстаў! Дзякуй, Дэйв!
дададзена аўтар Chuck, крыніца

Вам не трэба мяняць арыгінал, які рэзка - З # эквівалент (мяркуючы, што «С.Б.» з'яўляецца StringBuilder) проста:

sb.Append(((b & 0xFF) | 0x100).ToString("x").Substring(1, 2));
2
дададзена
Дзякуй, гэта было менавіта тое, што мне было трэба. Я быў у стане знайсці каго-то з кодам бегам Java і пратэставаць прадукцыйнасць і ўсё узгодненае прыгожа. Hooray для модульных тэстаў! Дзякуй, Дэйв!
дададзена аўтар Chuck, крыніца

b & 0xFF will mask the lowest byte. So whatever b is, you will get something between 0x00 and 0xFF.

У выніку цэлага лік, дзявяты біт не ўстаноўлены, незалежна ад таго, што было раней. Такім чынам, вы будзеце мець нешта паміж 0x0100 да 0x01FF.

З гэтага радка падрадок ад індэкса 1 да 3 абразаецца. Гэта дасць вам дзве апошнія лічбы, якія будуць нешта паміж 00 і FF. | 0х100 гэта спрытны трук, каб Integer.toHexString даць вам вядучыя нулі на працягу апошніх двух лічбаў, якія ён не ў адпаведнасці з яго Javadoc ...

Калі я правільна памятаю, ваш C# код не дакладна такі ж. Але я спадзяюся, што з гэтым тлумачэннем вы можаце стварыць яго самастойна :)

1
дададзена

b & 0xFF will mask the lowest byte. So whatever b is, you will get something between 0x00 and 0xFF.

У выніку цэлага лік, дзявяты біт не ўстаноўлены, незалежна ад таго, што было раней. Такім чынам, вы будзеце мець нешта паміж 0x0100 да 0x01FF.

З гэтага радка падрадок ад індэкса 1 да 3 абразаецца. Гэта дасць вам дзве апошнія лічбы, якія будуць нешта паміж 00 і FF. | 0х100 гэта спрытны трук, каб Integer.toHexString даць вам вядучыя нулі на працягу апошніх двух лічбаў, якія ён не ў адпаведнасці з яго Javadoc ...

Калі я правільна памятаю, ваш C# код не дакладна такі ж. Але я спадзяюся, што з гэтым тлумачэннем вы можаце стварыць яго самастойна :)

1
дададзена

b & 0xFF will mask the lowest byte. So whatever b is, you will get something between 0x00 and 0xFF.

У выніку цэлага лік, дзявяты біт не ўстаноўлены, незалежна ад таго, што было раней. Такім чынам, вы будзеце мець нешта паміж 0x0100 да 0x01FF.

З гэтага радка падрадок ад індэкса 1 да 3 абразаецца. Гэта дасць вам дзве апошнія лічбы, якія будуць нешта паміж 00 і FF. | 0х100 гэта спрытны трук, каб Integer.toHexString даць вам вядучыя нулі на працягу апошніх двух лічбаў, якія ён не ў адпаведнасці з яго Javadoc ...

Калі я правільна памятаю, ваш C# код не дакладна такі ж. Але я спадзяюся, што з гэтым тлумачэннем вы можаце стварыць яго самастойна :)

1
дададзена