VB ASCB в LotusScript? - PullRequest
       67

VB ASCB в LotusScript?

0 голосов
/ 25 февраля 2012

Работает над преобразованием подпрограммы шифрования Visual Basic SHA-256 для работы в LotusScript.

Идет хорошо, за исключением команды AscB VB.

Найдено: «Используйте функцию AscB, чтобы вернуть первый байт строки, содержащей байтовые данные.»

Не найдено способа сделать то же самое в LotusScript.

См. Команду LS CByte: «CByte возвращает выражение, преобразованное в байт».

Не вижу способа заставить его вернуть только первый байт выражения.

Есть предложения?

Derek

Ответы [ 2 ]

2 голосов
/ 25 февраля 2012

AscB подходит только для строк в однобайтовой кодировке символов. Все строковые данные LotusScript - это Unicode, представленные в двухбайтовой кодировке UTF16.

Функция LotusScript Uni () возвращает Long, содержащий целочисленное значение символа Unicode. Так как ввод является двухбайтовым символом, значение, возвращаемое Uni (), колеблется от 0 до 65535. Если вы хотите получить значения каждого из двух байтов, код, подобный этому, выполнит свою работу:

Dim ws As New NotesUIWorkspace
Dim s1 As String
Dim u1 As Long
Dim u2 As Long
Dim lowbyte As Integer
Dim highbyte As Integer
Dim b1 As Byte
Dim b2 as Byte

s1 = "Ʃ"    

u1 = Uni(s1)

lowbyte = u1 Mod 256
highbyte = (u1 - lowbyte) / 256

b1 = Cbyte(lowbyte)
b2 = Cbyte(highbyte)

Call ws.Prompt(prompt_ok,"test",s1 + " " + Cstr(Cint(b1)) + " " + Cstr(Cint(b2)))
0 голосов
/ 25 февраля 2012

Будут ли Asc, LeftB и RightB делать то, что вам нужно?

В моем тестировании ...

Lenb("A") = 2

Leftb("A", 1) = "A"

Asc(Leftb("A", 1)) = 65

Leftb("A", 2) = "A"

Asc(Leftb("A", 2)) = 65

Asc(Rightb(Leftb("A", 2), 1)) = 0 
...