【发布时间】:2018-10-28 13:49:19
【问题描述】:
我正在尝试使用 StrucLayout 和 FieldOffset 从内存中获取字符串
但是我很难理解byte 的工作原理。
这是我的 ATM 代码:
[StructLayout(LayoutKind.Explicit)]
public unsafe struct InfoDetails
{
[FieldOffset(0x14)]
public fixed sbyte Name[50];
public string getName
{
get
{
fixed (sbyte* namePtr = Name)
{
return new string(namePtr);
}
}
}
}
此代码returns:T。预期结果是TEZ。
关于我为什么做错的任何建议? 谢谢
【问题讨论】:
-
你能显示内存布局吗?
-
你为什么使用
sbyte而不是未签名的byte?并将byte[]转换为字符串使用Encoding类。 -
也许
Name是 unicode(所以两个字节/字符),而string(sbyte*)需要一个字节/字符。 -
好的,你知道字符串是如何存储的吗?据我了解,它们由 2 字节值(char)存储。 new string() 有 8 个重载:其中一个是指向以 0x00 结尾的字节数组的指针。所以你只得到第一个字节
-
试试char
标签: c# .net memory-management structlayout