gpt4 book ai didi

c# - 理解 MemoryMarshal.Cast 的返回值

转载 作者:行者123 更新时间:2023-12-04 04:20:13 30 4
gpt4 key购买 nike

我正在尝试了解新的 C# 类型 Span<T>
阅读微软的文章时All About Span: Exploring a New .NET Mainstay我在底部看到了What Is Span<T>?部分

Spans provide a multitude of benefits beyond those already mentioned. For example, spans support the notion of reinterpret casts, meaning you can cast a Span<byte> to be a Span<int> (where the 0th index into the Span<int> maps to the first four bytes of the Span<byte>). That way if you read a buffer of bytes, you can pass it off to methods that operate on grouped bytes as ints safely and efficiently.



他们在本文中没有提供任何示例,但我最终在 Adam Storr's article 中找到了执行此操作的(新方法)通过使用 MemoryMarshal.Cast方法

但是,当我尝试这样做时,我得到了一个奇怪的结果

var byteArray = new byte[] { 1,0,0,0, 0,1,0,0};
Span<byte> byteSpan = byteArray;
Span<int> intSpan = MemoryMarshal.Cast<byte, int>(byteSpan);

微软的文章说 the 0th index into the Span maps to the first four bytes of the Span .因此,通过创建 8 个字节的数组,我得到了 2 个整数的跨度。

第一个整数的值是 1这是我所期望的( 0001 ),但是对于第二个整数,我得到了值 256这是我不明白的。

我不应该得到值 2因为我的字节数组的第二半是 0010 ?

最佳答案

号码:

1

(可以用十六进制写成):
0x00000001
0x0001
0x01

具有大端字节模式:
0x00 0x00 0x00 0x01

和小端字节模式:
0x01 0x00 0x00 0x00

号码:
256

(可以用十六进制写成):
0x00000100
0x0100

具有大端字节模式:
0x00 0x00 0x01 0x00

和小端字节模式:
0x00 0x01 0x00 0x00

由于您的机器是小端的, MemoryMarshal.Cast正在使用数字的小端表示。因此 1 0 0 0被解释为 1 , 和 0 1 0 0被解释为 256 .

关于c# - 理解 MemoryMarshal.Cast 的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59577415/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com