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,我想知道这些字节中的哪个对应于Data1
,Data2
和Data3
以及它们的数值是多少是。上面的超链接显示了我的尝试:
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/