在C或C ++中,我们可以将变量的值直接写入字节数组。
int value = 3;
unsigned char array[100];
*(int*)(&array[10]) = value;
在C#中,我们也可以使用unsafe
和fixed
关键字来完成此操作。
int value = 3;
byte[] array = new byte[100];
fixed(...) { ... }
但是,Unity3D不允许使用unsafe
或fixed
。在这种情况下,运行时具有成本效益的方法是什么?我粗略猜测可以使用.Net Core或.Net Framework中的二进制读取器或编写器类来完成,但我不确定。
答案 0 :(得分:2)
由于您无法使用不安全的内容 - 您可以自己打包int
值:
int value = 3;
var array = new char[100];
array[10] = (char)value; // right half
array[11] = (char)(value >> 16); // left half
因为char
在C#(16位数)中基本上是ushort
。这应该与使用
*(int*)(&array[10]) = value;
另一种方法是使用`BitConverter:
var bytes = BitConverter.GetBytes(value);
array[10] = (char)BitConverter.ToInt16(bytes, 0);
array[11] = (char)BitConverter.ToInt16(bytes, 2);
但要注意结束。
答案 1 :(得分:2)
您还可以尝试在Unity中激活unsafe关键字: How to use unsafe code Unity
这样可以免除你使用任何" hacks"。