1

2 つの整数 (byte[] になる値、配列の長さを設定する値) を取り、値を表す byte[] を返す関数 (C#) を作成しようとしています。現在、長さ 4 の byte[] のみを返す関数があります (32 ビットを想定しています)。

たとえば、InttoByteArray(0x01, 2) のようなものは {0x00, 0x01} の byte[] を返す必要があります。

誰にもこれに対する解決策がありますか?

4

6 に答える 6

4

以下を使用できます

    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-17T18:57:17.870 に答える
2

これには、BitConverter ユーティリティ クラスを使用できます。intを変換するときに配列の長さを指定できるとは思いませんが。ただし、いつでも結果を切り捨てることができます。

http://msdn.microsoft.com/en-us/library/de8fssa4.aspx

于 2009-07-17T17:23:36.763 に答える
0

現在のアルゴリズムを使用して、指定された長さが 4 未満の場合は配列からバイトを切り落とし、4 を超える場合はゼロで埋めます。すでに解決済みのようです。

于 2009-07-17T17:23:17.733 に答える
0

次のようなループが必要です。

for(int i = arrayLen - 1 ; i >= 0; i--) {
  resultArray[i] = (theInt >> (i*8)) & 0xff; 
}
于 2009-07-17T17:26:14.043 に答える
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配列を右から左に、下位から最上位までのバイトで埋めます。

于 2009-07-17T17:28:16.007 に答える
-2
byte byte1 = (byte)((mut & 0xFF) ^ (mut3 & 0xFF));
byte byte2 = (byte)((mut1 & 0xFF) ^ (mut2 & 0xFF));

から引用

C#: ulong から byte に変換できません

于 2009-07-17T17:25:58.570 に答える