Convert an integer to a byte[] of specific length
我正在尝试创建一个函数(c),它将取2个整数(一个值变为byte[],一个值设置数组的长度),并返回一个byte[]来表示该值。现在,我有一个函数,它只返回长度为4的字节[]s(我假定为32位)。
例如,像inttobytearray(0x01,2)这样的函数应该返回0x00,0x01的byte[]。
有人能解决这个问题吗?
您可以使用以下内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | static public byte[] ToByteArray(object anyValue, int length) { if (length > 0) { int rawsize = Marshal.SizeOf(anyValue); IntPtr buffer = Marshal.AllocHGlobal(rawsize); Marshal.StructureToPtr(anyValue, buffer, false); byte[] rawdatas = new byte[rawsize * length]; Marshal.Copy(buffer, rawdatas, (rawsize * (length - 1)), rawsize); Marshal.FreeHGlobal(buffer); return rawdatas; } return new byte[0]; } |
一些测试用例是:
1 2 3 4 5 6 7 8 | byte x = 45; byte[] x_bytes = ToByteArray(x, 1); int y = 234; byte[] y_bytes = ToByteArray(y, 5); int z = 234; byte[] z_bytes = ToByteArray(z, 0); |
这将创建一个数组,其大小与您传入的类型相同。如果您只想返回字节数组,那么应该很容易更改。现在它的形式更一般
要在示例中获得所需的内容,可以执行以下操作:
1 2 | int a = 0x01; byte[] a_bytes = ToByteArray(Convert.ToByte(a), 2); |
您可以使用bitconverter实用程序类进行此操作。虽然我认为它不允许您在转换int时指定数组的长度,但是您可以截断结果。
http://msdn.microsoft.com/en-us/library/de8fssa4.aspx
1 2 3 4 5 6 7 8 9 10 11 12 13 |
它从右到左用从低到最高的字节填充
你需要一些类似这样的循环:
1 2 3 | for(int i = arrayLen - 1 ; i >= 0; i--) { resultArray[i] = (theInt >> (i*8)) & 0xff; } |
如果指定的长度小于4,则采用当前算法并切掉数组中的字节;如果指定的长度大于4,则用零填充。听起来你已经把它解决了。
1
2 byte byte1 = (byte)((mut & 0xFF) ^ (mut3 & 0xFF));
byte byte2 = (byte)((mut1 & 0xFF) ^ (mut2 & 0xFF));
引用自
C:无法从ulong转换为byte