使用blowfish NET的C#问题:如何从Uint32[]转换为byte[]
在 C# 中,我使用 Blowfish.NET 2.1.3 的 BlowfishECB.cs 文件(可以在此处找到)
在C++中,未知,但类似。
在 C++ 中,Initialize(blowfish) 过程如下:
void cBlowFish::Initialize(BYTE key[], int keybytes)
在 C# 中,Initialize(blowfish) 过程相同
public void Initialize(byte[] key, int ofs, int len)
这就是问题所在:
这就是 C++ 中密钥的初始化方式
DWORD keyArray[2] = {0}; //declaration
...some code
blowfish.Initialize((LPBYTE)keyArray, 8);
如您所见,密钥是一个包含两个的数组DWORDS,总共8个字节。
在 C# 中,我这样声明,但出现错误 错误
BlowfishECB blowfish = new BlowfishECB();
UInt32[] keyarray = new UInt32[2];
..some code
blowfish.Initialize(keyarray, 0, 8);
是:
Argument '1':无法从 'uint[]' 转换为 'byte[]'
我做错了什么?
提前致谢!
In C#,I'm using Blowfish.NET 2.1.3's BlowfishECB.cs file(can be found here)
In C++,It's unknown,but it is similiar.
In C++,the Initialize(blowfish) procedure is the following:
void cBlowFish::Initialize(BYTE key[], int keybytes)
In C#,the Initialize(blowfish) procedure is the same
public void Initialize(byte[] key, int ofs, int len)
This is the problem:
This is how the key is initialized in C++
DWORD keyArray[2] = {0}; //declaration
...some code
blowfish.Initialize((LPBYTE)keyArray, 8);
As you see,the key is an array of two DWORDS,which is 8 bytes total.
In C# I declare it like that,but I get an error
BlowfishECB blowfish = new BlowfishECB();
UInt32[] keyarray = new UInt32[2];
..some code
blowfish.Initialize(keyarray, 0, 8);
The error is:
Argument '1': cannot convert from 'uint[]' to 'byte[]'
What am I doing wrong?
Thanks in advance!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以使用 BitConverter 从 UInt32 获取字节。
为此,您需要在循环中转换每个元素。 我会做类似的事情:
返回:
You can use BitConverter to get the bytes from a UInt32.
To do this, you'll need to convert each element in a loop. I would do something like:
To go back:
如果您使用的是 VS2008 或 C# 3.5,请尝试以下 LINQ + BitConverter 解决方案
分解
编辑 非 LINQ 解决方案也同样有效
If you are using VS2008 or C# 3.5, try the following LINQ + BitConverter solution
Breaking this down
EDIT Non LINQ solution that works just as well
如果您需要更快的方式来转换值类型,您可以使用我在以下答案中描述的技巧:将 float[] 转换为 byte[] 的最快方法是什么?
这个 hack避免内存分配和迭代。 它以 O(1) 的时间复杂度为您提供了数组的不同视图。
当然,只有在性能存在问题时才应该使用它(避免过早优化)。
If you need a faster way to convert your value types, you can use the hack I described in the following answer: What is the fastest way to convert a float[] to a byte[]?
This hack avoid memory allocations and iterations. It gives you a different view of your array in O(1).
Of course you should only use this if performance is an issue (avoid premature optimization).