■96180 / inTopicNo.4) |
Re[1]: byte2次元配列を部分的にbyte1次元配列にコピー |
□投稿者/ KOZ (144回)-(2020/10/26(Mon) 17:17:03)
|
■No96177 (taro さん) に返信
思いついたコード
[DllImport("Kernel32.dll", EntryPoint = "RtlMoveMemory", SetLastError = false)]
static extern void MoveMemory(ref byte dest, ref byte src, int size);
static void Main(string[] args)
{
var src = new byte[] { 1, 2, 3, 0, 0, 4, 5, 6, 0, 0, 7, 8, 9, 0, 0, };
var dst = new byte[3, 3];
MoveMemory(ref dst[0, 0], ref src[0], 3);
MoveMemory(ref dst[1, 0], ref src[5], 3);
MoveMemory(ref dst[2, 0], ref src[10], 3);
}
あとは、String.cs のこのあたり
https://referencesource.microsoft.com/#mscorlib/system/string.cs#372
Unsafe コードを使って CPU が 64 ビットなら long, そうでないなら int にキャストして比較しているんですが、同じようにキャストして代入すると速いかも。
(終端の処理が面倒そう)
|
|