2009-07-17 51 views
1

我試圖創建一個函數(C#),將帶2點的整數(一個值,以成爲一個byte [],值到所述陣列的長度設定爲]的整數)並返回一個表示該值的字節[]。現在,我有一個函數,它只返回長度爲4的字節[],我假設爲32位。轉換爲字節[特定長度

例如,像InttoByteArray(0×01,2)應該返回一個字節[]的{0×00 0×01}。

有沒有人有解決這個問題?

回答

0

以你目前的算法,並砍掉數組的字節,如果指定的長度小於4,或用零填充它,如果它超過4聽起來像是你已經擁有它解決了我。

-2
byte byte1 = (byte)((mut & 0xFF)^(mut3 & 0xFF)); 
byte byte2 = (byte)((mut1 & 0xFF)^(mut2 & 0xFF)); 

引述

C#: Cannot convert from ulong to byte

+0

不能解決問題。原本應該爲任意數量的字節工作,而不僅僅是兩個。 – 2009-07-17 17:31:53

0

你會想一些循環,如:

for(int i = arrayLen - 1 ; i >= 0; i--) { 
    resultArray[i] = (theInt >> (i*8)) & 0xff; 
} 
0
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數組,字節從小到大。

2

您可以使用下面的

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);