#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