Как отделить байт от потока байтов

#arrays #vb.net #byte

#массивы #vb.net #байт

Вопрос:

Я объединил байты a string и байт длины этого string Ex. stackoverflow13 (читаемое представление байта stackoverflow плюс байты длины 13 ) теперь эти объединенные байты будут отправлены в другую программу, которая использует Encoding.UTF8.GetString(byte, index, count) , я хочу разделить индекс stackoverflow и 13 для count . Как я могу это сделать. Это код:

 Dim text1() As Byte = Encoding.UTF8.GetBytes("stackoverflow")
        Dim len1() As Byte = BitConverter.GetBytes(text1.Length)
        Dim byteLen As Integer = text1.Length   len1.Length
        Dim bStream(byteLen) As Byte
        text1.CopyTo(bStream, 0)
        len1.CopyTo(bStream, text1.Length)
        '                           |
        '                           | Byte stream "bStream"
        '                           V
        '-----------------------------------------------------------
        '--------------------Different program---------------------- 
        '-----------------------------------------------------------
        '                           |
        '                           | Byte stream "bStream"
        '                           |
        '                           |                       | n = supposed to be len1
        '                           V                       V     from the stream
        Debug.WriteLine(Encoding.UTF8.GetString(bStream, 0, n))
  

Как я могу сделать это несколько раз в аналогичном потоке? Пример.

fileOne,fileOneLength,fileTwo,fileTwoLength...

Комментарии:

1. Зачем вам нужно отправлять длину строки?

2. Ваш вопрос вводит в заблуждение, поскольку вы не отправляете «stackoverflow13». Вы преобразуете целое число в 4 байта. Последние 4 байта вашего потока будут целым числом для длины. Обычно это отправляется в начале как заголовок пакета.

Ответ №1:

Можете ли вы использовать разделитель, чтобы указать другой программе, с чего начать поиск данных длины, таких как «-«, чтобы это было «stackloverflow-13».

     Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

    ' Parsing using a  delimeter 
    Dim text1() As Byte = Encoding.UTF8.GetBytes("stackoverflow" amp; "-") ' concatenate a delimter in the string
    '   Convert to string, otherwise the program sends the byte value of 13 plus 3 padded zeros so you end up transmitting a Carriage return and 3 null characters
    Dim len1() As Byte = Encoding.UTF8.GetBytes(text1.Length - 1.ToString) ' Subtract the delimteter character value from the total
    Dim byteLen As Integer = text1.Length   len1.Length
    Dim bStream(byteLen) As Byte
    text1.CopyTo(bStream, 0)
    len1.CopyTo(bStream, text1.Length)


    ' This goes in the other program 
    Dim Str() As String = Encoding.UTF8.GetString(bStream, 0, bStream.Length).Split("-")

    Dim Text As String = Str(0)
    Dim Index As Integer = CInt(Str(1))


End Sub