2016-08-09 5 views
0

У меня есть строка say "768932A3", которую я хочу разделить на две части следующим образом: 76 89 32 A3 для преобразования в двоичный. Я пробовал цикл, но он не работает. Просьба помочь:VB.Net looping через строку

For i = 0 To data.Length - 1 

    j = i + 2 
    incremented &= Convert.ToInt64(data.Substring(i, j), 16) 
    ascii &= Chr(Convert.ToInt64(data.Substring(i, j), 16)) 
    i = j + 2 

Next 
+0

Осторожно, сейчас. Chr использует текущую кодовую страницу ANSI вашего потока. Если бы это было иначе, чем во время и в том месте, где строка была сериализована в шестнадцатеричную строку, вы бы неправильно ее декодировали. (И ваша текущая кодовая страница ANSI почти наверняка не называется ASCII, поэтому ваша переменная имеет вводящее в заблуждение имя.) Вы действительно должны быть уверены в том, какая кодировка использовалась во время сериализации и декодировала ту же самую кодировку. Текст декодирования обычно выполняется через байтовый массив и использует класс System.Text.Encoding. См. [Кодировка символов в .NET] (https://msdn.microsoft.com/en-us/library/ms404377.aspx) –

ответ

0

Второй параметр подстроки - это не конечная позиция, а длина символов, которые следует учитывать из начальной позиции.

For i = 0 To data.Length - 1 Step 2 
    ' Not clear what are you trying to do here 
    ' incremented &= Convert.ToInt64(data.Substring(i, 2), 16) 

    Dim value As Long = Convert.ToInt64(data.Substring(i, 2), 16) 


    ascii &= Chr(Convert.ToInt64(data.Substring(i, 2), 16)) 
Next 
+0

Я получаю сообщение об ошибке необработанного исключения переполнения –

+0

Это не происходит с тестовой строкой " 768932A3" . Каковы типы данных переменной ascii и увеличиваемой переменной? – Steve

+0

Я сделал исправление, и он сработал спасибо. –