我正在从大端的二进制流中读取数据。 BitConverter类自动执行此操作。不幸的是,我需要的浮点转换与BitConverter.ToSingle(byte [])不一样,所以我有来自同事的自己的例程。但输入字节[]需要小端。有没有人有一个快速的方法来转换byte []数组的字节顺序。当然,我可以交换每个字节,但必须有一个技巧。谢谢。在C#中从大端到小端交换字节的快速方法
5
A
回答
0
你的同事的例程是什么样的?如果显式访问字节,则可以更改代码(或者更确切地说,为big-endian数据创建一个单独的方法),而不是颠倒字节。
3
这里是一个字节数组改变字节序单打的快速方法:
public static unsafe void SwapSingles(byte[] data) {
int cnt = data.Length/4;
fixed (byte* d = data) {
byte* p = d;
while (cnt-- > 0) {
byte a = *p;
p++;
byte b = *p;
*p = *(p + 1);
p++;
*p = b;
p++;
*(p - 3) = *p;
*p = a;
p++;
}
}
}
+0
说我在十六进制输入是62,4d,00,4e然后输出我认为应该是49,62,4e,00,但这可能是因为我在16位字工作。 SwapSingles返回4e,00,4d,62这不是我所需要的。 – initialZero 2009-10-23 00:07:45
+0
@initialZero:单个是四个字节。那么,你是没有字节还是它们不代表Single? – Guffa 2009-10-23 09:00:14
4
我使用LINQ:
var bytes = new byte[] {0, 0, 0, 1};
var littleEndianBytes = bytes.Reverse().ToArray();
Single x = BitConverter.ToSingle(littleEndianBytes, 0);
您也可以.Skip()
和.Take()
你的心脏的内容,否则在BitConverter方法中使用索引。
相关问题
- 1. ASM中的快速小端到大端转换
- 2. Ç40位字节交换(端)
- 3. 使用opencl交换字节顺序的快速方法
- 4. 快速端到端测试
- 5. 是否存在任何方式将TIFF图像从小端字节顺序转换为大端字节?
- 6. C/C++代码转换大端到小端
- 7. 大端小端转换
- 8. C#小端或大端?
- 9. 从大端到小端的数据转换
- 10. 节点快速传递变量从客户端到服务器
- 11. 在VB.NET中预留端口的快速方法
- 12. 在java中快速排序的交换方法
- 13. 在PHP中检查图片大小的快速方法
- 14. C - 交换两个相同大小的内存块的最快方法?
- 15. C小端,但产生大端结果?
- 16. 大端或小端?
- 17. 快速前端开发解决方案?
- 18. 的Netty 4:是否可以读取小端和大端字节在同一ByteBuf
- 19. 快速阵列转换从Java到C++
- 20. Apache访问日志高字节大小返回到客户端
- 21. 转换小端到大端包括0(零)
- 22. 字节交换和C++/C
- 23. 方法String.getBytes()是大端序还是小端序?
- 24. 如何使用bitConverter.ToInt32方法从c#中的大端排序获取小端数据?
- 25. 将4字节转换为浮点数的最快方法C++
- 26. 创建快速GUI前端
- 27. 混乱htons-小端/大端
- 28. 在Objective-C中交换字节顺序?
- 29. 交换端
- 30. 将字节[]字符串转换为其整数值的快速方法
我需要预先在消息对象中转换数组。 – initialZero 2009-10-21 20:14:21
乔恩,不MiscUtil有一个EndianBitConverter? – LBushkin 2009-10-21 20:16:24
@LBushkin:它的确如此,这是我的第一个想法 - 但这听起来像是一个不同的问题。 – 2009-10-21 20:16:48