У нас на AS400 есть программа, которая принимает число, шифрует его и затем передает зашифрованные символы обратно.Используя метод CWBX stringConverter.FromBytes ... Я могу преобразовать числовое значение кода в байтах / ascii в соответствующий ему символ.Некоторое время это работало нормально, пока мы не заметили, что некоторые значения обрезаются.
Возвращенный байтовый массив выглядит следующим образом: (70, 126, 135, 27, 0, 201, 222, 229, 52, 75, 61, 121, 34, 65, 113, 215)
, где 240 = "0", 241 = "1", 64 = [Пробел] и т. Д. ... Проблема заключается в5-й байт равен нулю.Это [Нуль].
Поэтому вместо того, чтобы видеть что-то вроде: # ^! @ 7 '<"& $ # T ~ * (<br> Я вместо этого вижу: # ^! @ Потому что 5-й символьный элемент - [Null], он существенно обрезает этот символ, а также остальную часть моей строки!
Обычно я просто проверяю байтовый элемент = 0, а затем делаю что-то еще. Единственная проблема в том, что у меня естьчтобы вставить эти данные в базу данных, чтобы впоследствии их можно было расшифровать, чтобы я не мог изменить символ и изменить его на, скажем, символ «#».
Я попытался перебрать каждое значение, и еслибайт равен нулю, затем добавляется vbNull к строке, но затем, когда он расшифрован, он не возвращается как тот же байт ascii-код "0", он возвращается как "241", что vbNull.
Здесьмой текущий код:
Dim as400 As cwbx.AS400System
as400 = New cwbx.AS400SystemClass()
Dim program As cwbx.Program = New cwbx.Program()
Dim strResult(1) As String
as400.Define(RPGServer)
program.system = as400
program.system.UserID = RPGUsername
program.system.Password = RPGPassword
program.LibraryName = CurrentLibrary
program.ProgramName = EncryptionProgram
If as400.IsConnected(cwbx.cwbcoServiceEnum.cwbcoServiceRemoteCmd) = 0 Then
as400.Disconnect(cwbx.cwbcoServiceEnum.cwbcoServiceAll)
as400.Connect(cwbx.cwbcoServiceEnum.cwbcoServiceRemoteCmd)
End If
Dim stringConverter As cwbx.StringConverter = New cwbx.StringConverterClass()
Dim parameters As cwbx.ProgramParameters = New cwbx.ProgramParametersClass()
stringConverter.Length = 16
parameters.Append("&INNUM", cwbx.cwbrcParameterTypeEnum.cwbrcInput, 16)
parameters("&INNUM").Value = stringConverter.ToBytes(CardNo.PadRight(16, " "))
parameters.Append("&OUTNUM", cwbx.cwbrcParameterTypeEnum.cwbrcOutput, 16)
program.Call(parameters)
strResult(0) = stringConverter.FromBytes(parameters("&OUTNUM").Value)
А вот что я пытался изменить с помощью символа:
stringConverter.Length = 16
Dim byteArr() As Byte = {22, 11, 57, 27, 0, 221, 252, 143, 52, 54, 66, 72, 31, 65, 24, 77}
Dim strValue As String = ""
For Each b As Byte In byteArr
stringConverter.Length = 1
If b = 0 Then
strValue &= vbNull
Else
Dim tbb2() As Byte = {b}
strValue &= stringConverter.FromBytes(tbb2)
End If
Next
stringConverter.Length = 16
Dim tttt As Byte() = stringConverter.ToBytes(strValue)