私は構造体を持っています:
[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
反復なしで同じタスクを達成しようとしていましたが、機能しません (コンパイル エラーではなく、補間が間違っているだけです)。nameBuf
-loopなしで割り当てることはできますwhile
か?
更新.ではなく.
を使用することもお勧めします。(byte*)
Marshal.Copy