在 C# 中将 Byte 数组转换为类似 Int 的数组
BitConverter.ToUInt16() 期望字节被反转,我猜这就是它们在内存中存储的方式。 但是,当它没有反转时,我该如何转换它,而不修改数组呢?
Byte[] ba = { 0, 0, 0, 6, 0, 0 };
BitConverter.ToUInt16(ba, 2); // is 1536/0x0600, but I want 6/0x0006
BitConverter.ToUInt16() expects the bytes to be reversed, i guess that's how they are stored in memory. But how can I convert it when it's not reversed, w/o modifying the array?
Byte[] ba = { 0, 0, 0, 6, 0, 0 };
BitConverter.ToUInt16(ba, 2); // is 1536/0x0600, but I want 6/0x0006
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
听起来你想要我的
EndianBitConverter
位于MiscUtil
,它允许您指定是否要使用大字节序还是小字节序。基本上它提供与 BitConverter 相同的功能,但作为实例方法。 然后,您可以获得适当类型的
EndianBitConverter
并用它执行您想要的操作。(它提供了更多的功能来有效地处理数组,这对您可能有用也可能没用。)
该库是在相当宽松的许可下开源的。
It sounds like you want my
EndianBitConverter
inMiscUtil
, which lets you specify whether you want to use big or little endianness.Basically it provides the same functionality as
BitConverter
but as instance methods. You then get the appropriate kind ofEndianBitConverter
and do what you want with it.(It provides a bit more functionality for working efficiently with arrays, which may or may not be useful to you.)
The library is open sourced under a fairly permissive licence.
您还可以使用 IPAddress.HostToNetworkOrder。
You can also use IPAddress.HostToNetworkOrder.
我认为你最好的选择是使用 Array.Reverse 方法反转数组。
http://msdn.microsoft.com /en-us/library/system.array.reverse(VS.71).aspx
I think your best call would be to reverse the array with Array.Reverse method.
http://msdn.microsoft.com/en-us/library/system.array.reverse(VS.71).aspx