我想在C#中實現XTEA算法,並且我找到了一個函數來爲我做這件事。獲取byte [16]到uint32 [4]
但是,我必須通過一個障礙。該功能要求將數據和密鑰放入UInt32數組中。
爲了時間的緣故,我只是將相關內容發佈到可用的格式。
這裏就是我想在C#僞代碼做:
String keyStr = "foobar";
byte[] keyBytes = Encoding.ASCII.GetBytes(keyStr);
/* keyBytes = 66, 6F, 6F, 62, 61, 72 (obviously I need to pad it
out to be followed by i 00's, i = 16 - keyBytes.Length); */
UInt32[] keyArr = new UInt32[4];
keyArr[0] = keyBytes[0 to 3];
keyArr[1] = keyBytes[4 to 7];
我聽說,我需要使用位或,或類似的東西,但我不能完全肯定是如何工作的。我也聽說過使用BitConverter.ToString,正確解析它,然後假設結果是一個字符串:「666F6F62」,我可以將THAT轉換爲uint32的一個。但是這似乎是sl//懶惰/低效率。
在寫這個問題我也試過,也許它會澄清,即使它不工作:
String keyStr = "foobar"
byte[] keyBytes = new byte[16];
Encoding.ASCII.GetBytes(keyStr).CopyTo(keyBytes, 0);
UInt32[] keyArr = new UInt32[4];
Buffer.BlockCopy(keyBytes, 0, keyArr[0], 0, 4);
Console.WriteLine("keyBytes[]: " + BitConverter.ToString(keyBytes));
Console.WriteLine(keyArr[0].ToString());
'BitConverter.ToUInt32'不適合你嗎? 「BlockCopy」有什麼「不起作用」? –
@BenVoigt我完全忽略了這種可能性。而且我的方法確實有效,但我忘了解釋排列順序。 – Fuselight