2016-05-13 103 views
2

我有一個ushort數組,需要轉換成字節數組才能通過網絡傳輸。將ushort []轉換爲byte []並返回

一旦它到達目的地,我需要將它重新轉換回它與之相同的ushort陣列。

USHORT陣列

是一個數組,它是長度217,088(由424 1D陣列細分圖像512的)的。它存儲爲16位無符號整數。每個元素是2個字節。

字節數組

它需要被轉換成字節數組用於網絡的目的。由於每個ushort元素值2個字節,我假設字節數組長度需要是217,088 * 2?

就轉換而言,然後'正確轉換',我不確定如何做到這一點。

這是用於C#的Unity3D項目。有人能指出我正確的方向嗎?

謝謝。

回答

1

您正在尋找BlockCopy

https://msdn.microsoft.com/en-us/library/system.buffer.blockcopy(v=vs.110).aspx

,是的,short以及ushort爲2個字節;這就是爲什麼相應的byte陣列應該是初始short之一的兩倍。

直接(byteshort):

byte[] source = new byte[] { 5, 6 }; 
    short[] target = new short[source.Length/2]; 

    Buffer.BlockCopy(source, 0, target, 0, source.Length); 

反向:

short[] source = new short[] {7, 8}; 
    byte[] target = new byte[source.Length * 2]; 
    Buffer.BlockCopy(source, 0, target, 0, source.Length * 2); 

使用offset秒(Buffer.BlockCopy第四參數)可以具有一維數組是細分(如你所知):

// it's unclear for me what is the "broken down 1d array", so 
    // let it be an array of array (say 512 lines, each of 424 items) 
    ushort[][] image = ...; 

    // data - sum up all the lengths (512 * 424) and * 2 (bytes) 
    byte[] data = new byte[image.Sum(line => line.Length) * 2]; 

    int offset = 0; 

    for (int i = 0; i < image.Length; ++i) { 
    int count = image[i].Length * 2; 

    Buffer.BlockCopy(image[i], offset, data, offset, count); 

    offset += count; 
    } 
+0

感謝您的支持。你能否解釋一下'{5,6}'和'{7,8}'究竟在做什麼?謝謝。 –

+0

@Oliver Jone:'{5,6}'只是*樣本值*:'new byte [] {5,6};' - 創建一個包含兩個項目的新數組 - '5'和'6'。 –

+0

謝謝你,只是想指出你可能需要使用'Buffer.BlockCopy(image [i],0,data,offset,count);'當做一個多維數組拷貝時(0是每個數組的起始位置數組作爲for循環重複) – Snouto