История одного перевода

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

История одного перевода

Сообщение Vitaly1 » 29.09.2004 (Ср) 15:03

Это ни си
Код: Выделить всё
unsigned getKS(char *uk, unsigned kol)
{
unsigned   crc;
char       kk;

crc=0xFFFF;
for( ; kol; --kol) {
  crc ^= *uk++ ;
  for(kk=8; kk; --kk) {
    if(crc & 1) { crc >>=1;  crc ^=0xA001; }
    else          crc >>=1;
    }
  }
return  crc;
}


Это на VB

Код: Выделить всё
Public Function КонтрольнаяСумма(ByVal Buffer As String) As String
Dim c As Variant, k As Long, k1 As Long
Dim crc(1 To 16) As Byte, AOO1(1 To 16) As Byte
Dim Ves(1 To 16) As Byte

k = 1
For i = 1 To 16
crc(i) = 1
AOO1(i) = 0
Ves(i) = CByte(k)
If i = 8 Then
k = 1
Else
k = k * 2
End If
Next i

AOO1(1) = 1
AOO1(16) = 1
AOO1(14) = 1

While Buffer <> ""
c = Mid(Buffer, 1, 1)
'Xor c байтом буфера
For i = 1 To 8
crc(i) = crc(i) Xor Sgn(Asc(c) And Ves(i))
Next i

For i = 1 To 8
‘запоминаем 1 бит
k = crc(1)
‘Сдвиг в право
For j = 1 To 15
crc(j) = crc(j + 1)
Next j
crc(16) = 0

If k = 1 Then
'Õ&r c A001
For j = 1 To 16
crc(j) = crc(j) Xor AOO1(j)
Next j
End If
Next i
Buffer = Mid(Buffer, 2)
Wend

'Cчитаем вес байтов
k = 0
k1 = 0
For i = 1 To 16
If i <= 8 Then
k = k + Ves(i) * crc(i)
Else
k1 = k1 + Ves(i) * crc(i)
End If
Next i
КонтрольнаяСумма = Chr(k1) + Chr(k)
End Function


Public Function КонтрольнаяСумма1(ByVal Buffer As String) As String
Dim c As Variant, k As Long, k1 As Long
Dim crc(1 To 2) As Byte
crc(1) = 255
crc(2) = 255


While Buffer <> ""
c = Mid(Buffer, 1, 1)
'Xor c байтом буфера
crc(1) = crc(1) Xor Asc(c)

For i = 1 To 8
'запоминаем 1 бит
k = crc(1) And 1
‘Сдвиг в право
crc(1) = crc(1) \ 2 + 128 * (crc(2) And 1)
crc(2) = crc(2) \ 2

If k = 1 Then
'xor c A001
crc(1) = crc(1) Xor 1
crc(2) = crc(2) Xor CByte("&HA0")
End If
Next i
Buffer = Mid(Buffer, 2)

Wend

КонтрольнаяСумма1 = Chr(crc(2)) + Chr(crc(1))
End Function

Public Function КонтрольнаяСумма2(ByVal Buffer As String) As String
Dim c As Variant
Dim crc As Long, i As Long

crc =  CLng("&HFFFF")

While Buffer <> ""
c = Mid(Buffer, 1, 1)
'Xor c байтом буфера
crc = crc Xor Asc(c)

For i = 1 To 8
If (crc And 1) = 1 Then
‘Сдвиг в право
crc = crc \ 2
'Xor c A001
crc = crc Xor CLng("&HA001")
Else
‘Сдвиг в право
crc = crc \ 2
End If
Next i
Buffer = Mid(Buffer, 2)
Wend

КонтрольнаяСумма2 = Chr(crc \ 256) + Chr(crc And 255)
End Function

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 29.09.2004 (Ср) 15:52

Можно и сократить, причем значительно.

Кстати, Виталий, когда ты перестанешь давать названия функциям по русски? :)
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 29.09.2004 (Ср) 16:07

Сокращенный пример, в студию! ;)
I don't understand. Sorry.

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 29.09.2004 (Ср) 16:10

Эх... ну слова не скажи...

Можно, но мне это не нужно :)
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 29.09.2004 (Ср) 20:04

Дык, а в чём проблема-то?
Код: Выделить всё
Function getKS(uk() As Byte)  As Long
Dim i As Long, kk As Byte
getKS = &HFFFF&
For i = LBound(uk) To UBound(uk)
  getKS = getKS Xor uk(i)
  For kk=8 To 1 Step -1
    If getKS And 1& Then
        getKS = (getKS \ 2) Xor &HA001&
    Else
        getKS = getKS \ 2
    End If
  Next
Next
End Function


Перевод дословный, набирался прямо в окне "Ответить", не проверялся.
Просто мне непонятно, откуда взялись какие бы то ни было сложности с переводом.
Изображение

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 02.10.2004 (Сб) 11:22

Гайдар писал(а):Кстати, Виталий, когда ты перестанешь давать названия функциям по русски?

Гайдар, боюсь что это не истребимо во мне. Если только не запритят в VB использовать кирилицу для идентификаторов :lol:

tyomitch, спасибо за дополнительнную информацию о том как набирать 16 ричное число в неименнованных константах.
Переводил не дословно, потому, что у меня в программе сделано иначе.

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 02.10.2004 (Сб) 14:48

Vitaly1 писал(а):Гайдар, боюсь что это не истребимо во мне. Если только не запритят в VB использовать кирилицу для идентификаторов :lol:


Вообще-то они по-умолчанию запрещены (точнее категорически не рекомендованы), т.к. переносимость кода страдает - мало ли, какая у кого кодировка и какие шрифты и что будут значить твои символы и как их поймет компилятор.
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 02.10.2004 (Сб) 16:33

gaidar писал(а):
Vitaly1 писал(а):Гайдар, боюсь что это не истребимо во мне. Если только не запритят в VB использовать кирилицу для идентификаторов :lol:

Вообще-то они по-умолчанию запрещены (точнее категорически не рекомендованы), т.к. переносимость кода страдает - мало ли, какая у кого кодировка и какие шрифты и что будут значить твои символы и как их поймет компилятор.

Нет, вот как раз никаких технических проблем с использованием кириллических идентификаторов нет.
Проблемы только коммуникативные - что многих программистов это бесит. А языку-то всё равно, хоть по-китайски, хоть на фарси справа налево :-)
Изображение

Zer
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 460
Зарегистрирован: 26.09.2003 (Пт) 13:08
Откуда: Нижний Новгород

Сообщение Zer » 02.10.2004 (Сб) 17:07

Хех. Всё зависит от корявости вашего VB. У меня кирилицу категорически не хочит воспринимать(окромя ремарок), а у знакомого наоборот: даже названия кнопок по умолчанию "Кнопка1", "Кнопка2", "Кнопка3" ... :?
Microsoft DirectX - Маломягкий Прямой Х...
Не откладывай на завтра то, что можно выпить сегодня...

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 04.10.2004 (Пн) 10:42

Кнопка1 это в VBA может быть, и это более чем плохо, должна быть однозначность в стандартном названии объектов.

Использование кириллицы влечет за собой трудности, программист может в объявлении переменной вместо буквы кириллица набрать похожую на нее букву латиницы. Если нет явного объявления переменных то вообще может черт знает что произойти с вычислениями при путанице букв.

Zer писал(а):Всё зависит от корявости вашего VB. У меня кирилицу категорически не хочит воспринимать(окромя ремарок),

Скорее всего установлен не тот шрифт в редакторе VB


Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 47

    TopList