Как преобразовать обратно сплющенную строку в массив DBL? - PullRequest
2 голосов
/ 09 июня 2019

Я пытаюсь отправить плоский массив DBl из labview в c # через tcp. я получаю сплющенную строку в c #. я не знаю, как преобразовать их обратно в массив DBL?

Это мой код в C #:

{

    private TcpClient socketConnection;
    private Thread clientReceiveThread;


    void Start()
    {
        ConnectToTcpServer();
    }

    void Update()
    {

    }


    private void ConnectToTcpServer()
    {
        try
        {
            clientReceiveThread = new Thread(new ThreadStart(ListenForData));
            clientReceiveThread.IsBackground = true;
            clientReceiveThread.Start();
        }
        catch (Exception e)
        {
            Debug.Log("On client connect exception " + e);
        }
    }


    private void ListenForData()
    {
        try
        {
            socketConnection = new TcpClient("localhost", 5333);
            Byte[] bytes = new Byte[4000];
            while (true)
            {

                using (NetworkStream stream = socketConnection.GetStream())
                {
                    int length;

                    while ((length = stream.Read(bytes, 0, bytes.Length)) != 0)
                    {
                        Debug.Log(bytes.Length);
                        var incommingData = new byte[length];
                        Array.Copy(bytes, 0, incommingData, 0, length);
                        // Convert byte array to string message.                        
                        string serverMessage = Encoding.ASCII.GetString(incommingData);
                        Debug.Log("server message received as: " + serverMessage);
                        Debug.Log(serverMessage.Length);


                    }
                }
            }
        }
        catch (SocketException socketException)
        {
            Debug.Log("Socket exception: " + socketException);
        }
    }


}

Это мой код лабораторного просмотра:

Это мой вывод labview: (массив с плавающей точкой и плоская строка)

Это вывод в C #:

1 Ответ

1 голос
/ 09 июня 2019

Так как вы связали FALSE с «размером массива или строки prepend», единственные данные в буфере - это сплющенные удвоения. Но вам нужно явно установить «little endian», чтобы общаться с C #.

Если вы сделаете это изменение в коде G, то это должно сработать:

double[] dblArray = (double[])Array.CreateInstance(typeof(System.Double), length / 8); 
// I'm not sure if you need the cast or not.

В вашем коде есть постоянная "4000". Я бы изменил это на объявленную константу и поместил рядом с ней комментарий: «Убедитесь, что это кратно 8 (число байтов в двойном типе данных)».

...