相关疑难解决方法(0)

如何在C#中将结构转换为字节数组?

如何在C#中将结构转换为字节数组?

我已经定义了这样的结构:

public struct CIFSPacket
{
    public uint protocolIdentifier; //The value must be "0xFF+'SMB'".
    public byte command;

    public byte errorClass;
    public byte reserved;
    public ushort error;

    public byte flags;

    //Here there are 14 bytes of data which is used differently among different dialects.
    //I do want the flags2. However, so I'll try parsing them.
    public ushort flags2;

    public ushort treeId;
    public ushort processId;
    public ushort userId;
    public ushort multiplexId;

    //Trans request
    public byte wordCount;//Count of parameter words defining the data …
Run Code Online (Sandbox Code Playgroud)

c# struct

72
推荐指数
6
解决办法
12万
查看次数

托管代码和非托管代码,内存和大小有什么区别?

在看到和听取很多关于托管和非托管代码之后,并且知道唯一的区别是托管是关于CLR而非托管是在CLR之外,这让我非常好奇地了解它.它是什么,托管和非托管代码,内存和大小?

我在C#中编写的代码如何是非托管的,而这是C#代码,以及大小的内存如何变得不受管理.一个例子和一点点见解会有所帮助.

.net c# unmanaged managed

69
推荐指数
2
解决办法
7万
查看次数

为什么16字节是C#中struct的推荐大小?

我阅读了Cwalina的书(关于.NET应用程序的开发和设计的建议).

他说,一个好的设计结构必须小于16个字节(出于性能目的).

这究竟是为什么?

而且(更重要的是)如果我在Windows 7 x64下Core i7运行我的.NET 3.5(很快将是.NET 4.0)64位应用程序(这是基于CPU/OS的限制),我可以拥有更高效率的结构吗?

只是再次强调 - 我需要尽可能高效的结构.我试着一直把它放在堆栈上.该应用程序是多线程的,并且以亚毫秒为间隔运行,结构的当前大小为64字节.

c# struct memory-management class-design

34
推荐指数
4
解决办法
8147
查看次数

在C#中获取struct的大小

可能重复:
如何检查我的Structure消耗的字节数?

我有一个包装形式的结构

[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct test
{
  public int a;
  public uint16 b;
}
Run Code Online (Sandbox Code Playgroud)

我如何获得结构的大小,因为编译器声明sizeof只能在不安全的上下文中使用?

谢谢.

c#

22
推荐指数
2
解决办法
5万
查看次数

Marshal.SizeOf在包含guid的结构上提供了额外的字节

我有几个具有顺序布局的结构:

struct S1
{
  Guid id;
}

struct S2 
{
  Guid id;
  short s;
}

struct S3 
{
  Guid id;
  short s;
  short t;
}
Run Code Online (Sandbox Code Playgroud)

调用Marshal.SizeOf上面的结构类型,我得到了:

Size:
S1 = 16, as expected.
S2 = 20, copied an instance to a byte array, it only occupies first 18 bytes.
S3 = 20.
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么S2的大小是20而不是18.而这个问题只出现Guid在结构中.

抱歉找不到msdn的任何有用信息.我知道Marshal.SizeOf类型将在内存中占用的空间大小,但我想知道为什么它需要2个额外的字节来使大小为4的倍数.

我怎样才能避免这个"问题"?

非常感谢!

c# size struct guid marshalling

11
推荐指数
1
解决办法
2013
查看次数

这个C#结构的大小是多少?

存储在一个List<DataPoint>?是12个字节还是16个字节?

public struct DataPoint
{
    DateTime time_utc;
    float value;
}
Run Code Online (Sandbox Code Playgroud)

C#中有任何sizeof函数吗?

c# struct sizeof

10
推荐指数
3
解决办法
2万
查看次数

抛出异常时,使用Lazy <T>的StackOverflowException

一个非常简单的示例应用程序(.NET 4.6.2)在12737的递归深度处产生StackOverflowException ,如果最内部函数调用抛出异常(预期和正常),则递减深度为10243.

如果我使用a Lazy<T>来短暂保存中间结果,则StackOverflowException已经发生在2207的递归深度,如果没有抛出异常并且在递归深度为105,则抛出异常.

注意:如果编译为x64,则深度为105的StackOverflowException 仅可观察.使用x86(32位),效果首先发生在4272的深度.Mono(就像在https://repl.it上使用的那样)可以毫无问题地工作到74200的深度.

StackOverflowException不会在深度递归中发生,而是在升级回主程序时发生.finally块被深度处理,然后程序死掉:

Exception System.InvalidOperationException at 105
Finally at 105
...
Exception System.InvalidOperationException at 55
Finally at 55
Exception System.InvalidOperationException at 54
Finally at 54
Process is terminated due to StackOverflowException.
Run Code Online (Sandbox Code Playgroud)

或者在调试器中:

The program '[xxxxx] Test.vshost.exe' has exited with code -2147023895 (0x800703e9).
Run Code Online (Sandbox Code Playgroud)

谁能解释一下这个?

public class Program
{
    private class Test
    {
        private int maxDepth;

        private int …
Run Code Online (Sandbox Code Playgroud)

c#

9
推荐指数
1
解决办法
512
查看次数

Marshal.StructureToPtr失败了bool和固定大小的数组?

如果我用这个结构StructureToPtr编组,然后再用它解组PtrToStructure,我的第一个节点有y = {1,2},而我的第二个节点有y = {1,0}.

我不知道为什么,也许我的结构在某种程度上是坏的?bool从结构中删除它使它工作.

using System;
using System.Runtime.InteropServices;

namespace csharp_test
{
    unsafe class Program
    {
        [StructLayout(LayoutKind.Sequential)]
        public struct Node
        {
            public bool boolVar;
            public fixed int y[2];
        }

        unsafe static void Main(string[] args)
        {
            Node node = new Node();

            node.y[0] = 1;
            node.y[1] = 2;
            node.boolVar = true;

            int size = sizeof(Node);
            IntPtr ptr = Marshal.AllocHGlobal(size);
            Marshal.StructureToPtr(node, ptr, false);
            Node node2 = (Node)Marshal.PtrToStructure(ptr, typeof(Node));
            Marshal.FreeHGlobal(ptr);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

c# marshalling

8
推荐指数
1
解决办法
4689
查看次数

获取给定System.Type的结构的sizeof

给定一个结构MyStruct,我可以sizeof(MyStruct)在不安全的代码中使用该结构的实例大小.但是,我想获得给定结构Type对象的结构的大小,即sizeof(typeof(MyStruct)).有Marshal.SizeOf,但是返回非托管编组大小,而我想要该结构的托管大小.

.net c# sizeof

7
推荐指数
1
解决办法
4737
查看次数

.NET DateTime没有预定义的大小

由于DateTime是一个结构,其成员似乎分解为简单的数学值,我不确定为什么在它上面使用sizeof()会在问题标题中生成消息.

.net size datetime struct sizeof

6
推荐指数
1
解决办法
7076
查看次数

如何计算结构体实例的大小?

这个问题只是为了满足我的兴趣。阅读“在类和结构之间进行选择”页面显示“它的实例大小小于 16 字节。”。

鉴于这个简单的不可变的struct

public struct Coordinate
{
    private readonly double _latitude;
    private readonly double _longitude;

    public Coordinate(double latitude, double longitude)
    {
        _latitude = latitude;
        _longitude = longitude;
    }

    public double Latitude
    {
        get { return _latitude; }
    }

    public double Longitude
    {
        get { return _longitude; }
    }
}
Run Code Online (Sandbox Code Playgroud)

属性是否也计入 16 字节限制?还是只有字段才算?

如果后者不会使用structMicrosoft 提供的指南,因为 double 是 8 个字节?两个双精度数将是 16 个字节,正好是 16 个字节,不能少于 16 个字节。

c# struct

5
推荐指数
1
解决办法
3064
查看次数

Marshal.SizeOf(typeof(IntPtr)) vs sizeof(IntPtr)

我知道如何从根本上不同的Marshal.SizeOf()sizeof()是。但是在 的情况下,无论 CPU 架构如何,IntPtr它们不会总是返回完全相同的东西吗?

.net c#

4
推荐指数
1
解决办法
2342
查看次数