3
« Последний ответ от pitbullko 23 Августа 2024, 16:05 »
Да это-то понятно, что первый 1E и последний 0D байт не нужно преобразовывать, проблема же в том, что после преобразования получается какая-то ерунда.
Вот я беру пять байт: 4f c6 c2 cb cb. Потом преобразовываю их, и получаю: CF 96 12 9B
Вот код из 1С, который это делает
Для i = 0 По 3 Цикл
Результат.Вставить(i, ПобитовоеИли(Вход[i],ПобитовыйСдвигВлево(ПобитовоеИ(ПобитовыйСдвигВправо(Вход[4],i),1),7)));
КонецЦикла;
Это копия того кода что в мануале.
По вашему коду результат другой и тоже не правильный - CF 16 12 1B.
Для i = 0 По 3 Цикл
b = Вход[i];
if b > 127 Then
b = cmBin2Dec(cmXOR(HexToBin("0xCA"), Dec2Bin(b)));
endif;
a.Вставить(i, b);
КонецЦикла;
b = cmBin2Dec(cmXOR(HexToBin("0xCA"), Dec2Bin(Вход[4]))); //xоr-им пятый байт, хотя нигде не сказано об этом,
//Если этого не делать, то результат CF 96 12 9B как и у меня.
Для i = 0 По 3 Цикл
Если ПобитовоеИ(b,(ПобитовыйСдвигВлево(1, i))) > 0 Тогда
a[i] = ПобитовоеИли(a[i],ЧислоИзШестнадцатеричнойСтроки("0x80"));
КонецЕсли;
КонецЦикла;
Вот поэтому и проблема, распаковав пакет - он не соответтсвует тому что описано в мануале.