我試圖創建一個函數(C#),將帶2點的整數(一個值,以成爲一個byte [],值到所述陣列的長度設定爲]的整數)並返回一個表示該值的字節[]。現在,我有一個函數,它只返回長度爲4的字節[],我假設爲32位。轉換爲字節[特定長度
例如,像InttoByteArray(0×01,2)應該返回一個字節[]的{0×00 0×01}。
有沒有人有解決這個問題?
我試圖創建一個函數(C#),將帶2點的整數(一個值,以成爲一個byte [],值到所述陣列的長度設定爲]的整數)並返回一個表示該值的字節[]。現在,我有一個函數,它只返回長度爲4的字節[],我假設爲32位。轉換爲字節[特定長度
例如,像InttoByteArray(0×01,2)應該返回一個字節[]的{0×00 0×01}。
有沒有人有解決這個問題?
以你目前的算法,並砍掉數組的字節,如果指定的長度小於4,或用零填充它,如果它超過4聽起來像是你已經擁有它解決了我。
您可以使用BitConverter實用程序類來實現此目的。雖然我不認爲它允許您在轉換int時指定數組的長度。但是你總是可以截斷結果。
byte byte1 = (byte)((mut & 0xFF)^(mut3 & 0xFF)); byte byte2 = (byte)((mut1 & 0xFF)^(mut2 & 0xFF));
從
引述你會想一些循環,如:
for(int i = arrayLen - 1 ; i >= 0; i--) {
resultArray[i] = (theInt >> (i*8)) & 0xff;
}
byte[] IntToByteArray(int number, int bytes)
{
if(bytes > 4 || bytes < 0)
{
throw new ArgumentOutOfRangeException("bytes");
}
byte[] result = new byte[bytes];
for(int i = bytes-1; i >=0; i--)
{
result[i] = (number >> (8*i)) & 0xFF;
}
return result;
}
它從右向左填充result
數組,字節從小到大。
您可以使用下面的
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];
}
一些測試情況是:
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);
這將創建一個數組不論大小類型是您在傳遞如果你只想回報。字節數組,它應該很容易改變。現在,它在一個更通用的形式
爲了讓你能做到這一點,你需要在你的榜樣是什麼:
int a = 0x01;
byte[] a_bytes = ToByteArray(Convert.ToByte(a), 2);
不能解決問題。原本應該爲任意數量的字節工作,而不僅僅是兩個。 – 2009-07-17 17:31:53