0

この質問はその逆です。今のところ私はこれを得ました:

UInt32[] target;

byte[] decoded = new byte[target.Length * 2];
Buffer.BlockCopy(target, 0, decoded, 0, target.Length);

そして、これはうまくいきません..でいっぱいの配列を取得し0x00ます.

4

5 に答える 5

3

をに変換するには、 BitConverter.GetBytesメソッドを使用できます。unitbyte

于 2013-10-08T19:04:54.130 に答える
3

次のようなものをお勧めします。

UInt32[] target;

//Assignments

byte[] decoded = new byte[target.Length * sizeof(uint)];
Buffer.BlockCopy(target, 0, decoded, 0, decoded.Length);

コードを参照してください:

uint[] target = new uint[] { 1, 2, 3 };

//Assignments

byte[] decoded = new byte[target.Length * sizeof(uint)];
Buffer.BlockCopy(target, 0, decoded, 0, decoded.Length);

for (int i = 0; i < decoded.Length; i++)
{
    Console.WriteLine(decoded[i]);
}

Console.ReadKey();

以下も参照してください。

于 2013-10-08T19:16:33.940 に答える
2

このコードを試してください。わたしにはできる。

UInt32[] target = new UInt32[]{1,2,3}; 
  byte[] decoded = new byte[target.Length * sizeof(UInt32)];
  Buffer.BlockCopy(target, 0, decoded, 0, target.Length*sizeof(UInt32));

    foreach(byte b in decoded)     
    {
        Console.WriteLine( b);
    }
于 2013-10-08T19:15:09.613 に答える
1

あなたのコードにはいくつかのエラーがあります:

UInt32[] target = new uint[] { 1, 2, 3, 4 };

// Error 1:
// You had 2 instead of 4.  Each UInt32 is actually 4 bytes.
byte[] decoded = new byte[target.Length * 4];

// Error 2:
Buffer.BlockCopy(
  src: target, 
  srcOffset: 0, 
  dst: decoded,
  dstOffset: 0, 
  count: decoded.Length // You had target.Length. You want the length in bytes.
);

これにより、期待どおりの結果が得られるはずです。

于 2013-10-08T19:11:58.557 に答える
1

4 バイト (32 ビット) であるため、配列4を作成するには by を掛ける必要があります。ただし、リストを使用して入力し、後で必要に応じてそれから配列を作成できます。byteUInt32BitConverterbyte

UInt32[] target = new UInt32[] { 1, 2, 3 };
byte[] decoded = new byte[target.Length * 4]; //not required now
List<byte> listOfBytes = new List<byte>();
foreach (var item in target)
{
    listOfBytes.AddRange(BitConverter.GetBytes(item));   
}

配列が必要な場合:

byte[] decoded = listOfBytes.ToArray();
于 2013-10-08T19:09:33.480 に答える