看看下面的C#代碼(從BuildProtectedURLWithValidity
功能http://wmsauth.org/examples提取功能):編碼爲字節
byte[] StringToBytesToBeHashed(string to_be_hashed) {
byte[] to_be_hashed_byte_array = new byte[to_be_hashed.Length];
int i = 0;
foreach (char cur_char in to_be_hashed)
{
to_be_hashed_byte_array[i++] = (byte)cur_char;
}
return to_be_hashed_byte_array;
}
我的問題是:鑄件從字節字符做什麼在編碼方面?
我猜它在編碼方面確實沒有任何作用,但這是否意味着Encoding.Default是使用的那個,因此返回的字節將取決於框架如何編碼底層字符串特定的操作系統?
此外,是字符實際上比一個字節大(我猜2字節),實際上會省略第一個字節?
Encoding.UTF8.GetBytes(stringToBeHashed)
你怎麼想:
我在通過更換這一切都在想什麼?
也許在一些奇怪的環境中它會拋出,但我認爲在大多數情況下不會拋出。我已在本地「Microsoft(R)Visual C#編譯器版本4.6.1590.0」和repl.it中進行了測試:https://repl.it/Irlw/1。兩種情況下都能成功(沒有例外,就像輸出結果一樣)。 –
@Mariano Desanze,我不能告訴Mono,但是如果MS自己的參考源清楚地表明輸入字符[比較](https://referencesource.microsoft.com/#mscorlib/ system/convert.cs,fc990bd1275d43d6)(在第725行)轉換爲'Byte.MaxValue',如果char的值不適合字節,則拋出異常? 我的環境並不奇怪 - 這是純粹的香草.NET 3.5。 高級字節的無聲丟棄是一個壞主意 –
明白了:我在SharpDevelop中檢查了算術溢出/下溢*選項。所以這種轉換的結果是矛盾的,即取決於編譯器設置! –