在不使用C#不安全或固定关键字的情况下将值写入字节数组 在C或C++中,我们可以直接将变量的值写入字节数组。

在不使用C#不安全或固定关键字的情况下将值写入字节数组 在C或C++中,我们可以直接将变量的值写入字节数组。,c#,.net,unity3d,C#,.net,Unity3d,int value = 3; unsigned char array[100]; *(int*)(&array[10]) = value; 在C#中,我们也可以通过使用safe和fixed关键字来实现这一点 int value = 3; byte[] array = new byte[100]; fixed(...) { ... } 但是,Unity3D不允许使用不安全或固定。在这种情况下,什么是运行时经济高效的方法?我粗略地猜测,在.Net Core或.Net Framework中

int value = 3;
unsigned char array[100];
*(int*)(&array[10]) = value;
在C#中,我们也可以通过使用
safe
fixed
关键字来实现这一点

int value = 3;
byte[] array = new byte[100];
fixed(...) { ... }

但是,Unity3D不允许使用
不安全
固定
。在这种情况下,什么是运行时经济高效的方法?我粗略地猜测,在.Net Core或.Net Framework中使用二进制读写器类是可以做到的,但我不确定。

因为您不能使用不安全-您可以自己打包
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
。这应该和C++中的

相同。
*(int*)(&array[10]) = value;
另一种方法是使用`位转换器:

var bytes = BitConverter.GetBytes(value);
array[10] = (char)BitConverter.ToInt16(bytes, 0);
array[11] = (char)BitConverter.ToInt16(bytes, 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
。这应该和C++中的

相同。
*(int*)(&array[10]) = value;
另一种方法是使用`位转换器:

var bytes = BitConverter.GetBytes(value);
array[10] = (char)BitConverter.ToInt16(bytes, 0);
array[11] = (char)BitConverter.ToInt16(bytes, 2);

但请注意结尾。

您也可以尝试在Unity中激活不安全关键字:


这会让你省去使用任何“黑客”的麻烦。

你也可以尝试在Unity中激活不安全的关键字:


这将省去您使用任何“黑客”的麻烦。

char
数组不是
byte
数组。你想得到什么?你的意思是特别是如何在字符数组中写入
int
,还是一般情况下?我更改了代码@Backs@Evk对我想在char或字节数组的中间写<代码> int >代码。Unity支持<代码>不安全< /COD>和<代码>固定< /代码>关键字。请参阅的答案:char数组不是
字节
数组。你想得到什么?你的意思是特别是如何在字符数组中写入
int
,还是一般情况下?我更改了代码@Backs@Evk对我想在char或字节数组的中间写<代码> int >代码。Unity支持<代码>不安全< /COD>和<代码>固定< /代码>关键字。请看医生的回答