GUID结构显然类似于this

typedef struct _GUID {
  DWORD Data1;
  WORD  Data2;
  WORD  Data3;
  BYTE  Data4[8];
} GUID;


如何查看那些DWORD / WORD / BYTE值是什么?我正在尝试将它们吐出using C#,但是我不知道如何打印它们。

我不在乎这是用C,C#还是其他语言完成的,我认为Microsoft在后台使用了相同的结构。我只需要能够看到结构,就可以调试需要阅读这些内容的PHP脚本。我现在无权访问Visual Studio(我在Ubuntu上)。



这个“范围太广”如何?我将对其进行更具体的说明:给出具有十六进制表示形式E20A9380-FD55-BCA5-9037-451C9D86E949和二进制表示形式new byte[]{0x80,0x93,0x0a,0xe2,0x55,0xfd,0xa5,0xbc,0x90,0x37,0x45,0x1c,0x9d,0x86,0xe9,0x49}的GUID,我想知道这些字节中的哪个对应于Data1Data2Data3以及它们的数值是多少是。

上面的超链接显示了我的尝试:

public static void Main()
{
    var guid = new Guid("E20A9380-FD55-BCA5-9037-451C9D86E949");
    Console.WriteLine(guid);
    PrintObj(guid);
}


public static void PrintObj(object obj)
{
    foreach(PropertyDescriptor descriptor in TypeDescriptor.GetProperties(obj))
    {
        string name=descriptor.Name;
        object value=descriptor.GetValue(obj);
        Console.WriteLine("{0}={1}",name,value);
    }
}


但它不会打印任何内容。我猜那些不是可读的属性。

最佳答案

如果要在Ubuntu上使用C#,请查看Xamarin。

在C#中,Guid Structre公开一个ToByteArray,您可以逐字节打印。

foreach(var b in id.ToBytearray()) Console.WriteLine("{0:X2}", b);


或使用BitConverter类进行一些简短处理,以分别获取每个部分

var bytes = id.ToByteArray();
Console.WriteLine("Data1: {0:X8}", BitConverter.ToInt32(bytes, 0));
Console.WriteLine("Data2: {0:X4}", BitConverter.ToInt16(bytes, 4));
Console.WriteLine("Data3: {0:X4}", BitConverter.ToInt16(bytes, 6));
Console.WriteLine("Data4: {0:X16}", BitConverter.ToInt64(bytes, 8));

关于c# - 转储GUID结构?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24290874/

10-11 23:09
查看更多