【发布时间】:2015-10-02 15:28:26
【问题描述】:
我有一个结构:
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public unsafe struct FieldIndex {
public fixed byte Meta[16];
}
第一个字节是TypeCode。剩下的 15 个字节是一个 UTF8 编码的字符串。
我正在使用以下内容来填充nameBuf 字节数组:
private static string GetMetaName (FieldIndex meta) {
var idx = 0;
var bytesOut = 1;
var nameBuf = new byte[Indexer.MAXFIELDNAMELENGTH]; // 15
while (bytesOut < Indexer.MAXFIELDLENGTH) { // 16
nameBuf[idx] = *(byte*)((byte*)&meta + bytesOut);
++bytesOut;
++idx;
}
//var src = (byte*)&field.meta + 1;
//fixed (byte* b = nameBuf) {
// *((byte*)b) = (byte)src;
//}
return BinaryConverter.ToString(nameBuf, 0, Indexer.MAXFIELDNAMELENGTH, Indexer.DefaultEncoding);
}
在上面注释的代码中,我试图在没有while 迭代的情况下完成相同的任务,但它不起作用(没有编译错误,只是插值错误)。我可以在没有while-loop 的情况下分配nameBuf 吗?
更新
我也更喜欢使用(byte*) 而不是Marshal.Copy。
【问题讨论】:
标签: c# buffer bytearray unsafe-pointers