powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / CRC32
22 сообщений из 22, страница 1 из 1
CRC32
    #35614510
songv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как вычислить контрольную сумму CRC 32*.dbf файла средствами fOXa? может есть у кого готовая процедура? Нужно срочно!!! и на fox!!!
...
Рейтинг: 0 / 0
CRC32
    #35614522
korsak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
для какой версии фокса?
...
Рейтинг: 0 / 0
CRC32
    #35614599
songv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
для VISUAL FOXPRO 7.0
...
Рейтинг: 0 / 0
CRC32
    #35614633
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В 9-ке есть SYS(2017) - это CRC32
Есть еще SYS(2007) это CRC16 не подойдет?
...
Рейтинг: 0 / 0
CRC32
    #35614636
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
songv,

Вот ведь. Не помню! SYS(2007) в семерке считает CRC32 или только CRC16?
...
Рейтинг: 0 / 0
CRC32
    #35614693
songv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
это что-то не то. sys (2007)сравнивает текстовую строку
...
Рейтинг: 0 / 0
CRC32
    #35614699
А файл в строку загнать нельзя?
...
Рейтинг: 0 / 0
CRC32
    #35614730
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
songvэто что-то не то. sys (2007)сравнивает текстовую строку
Не сравнивает, а считает CRC16
Файл можно в строку через FileToStr()
...
Рейтинг: 0 / 0
CRC32
    #35614746
songv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
у меня 5 файлов (ежемесячный пакет данных) Каждый составляет несколько тысяч записей. И их все в строку?
...
Рейтинг: 0 / 0
CRC32
    #35614759
Ну в строку. И в чем проблема?
...
Рейтинг: 0 / 0
CRC32
    #35615256
Serg7965
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно так
* Для строки ?CRC32('Hello!') 9D2ACC56 или 2636827734
* Для файла m.infile=FOPEN('c:\autoexec.bat') ?CRC32(m.infile)
**********************************************************
Function GetCRC32
**********************************************************
Lparameter String
Local x,i,c,j,crc32

* Сервисный массив
m.crc32=HToInt('FFFFFFFF')
IF TYPE('CRCarr')='U'
PUBLIC ARRAY CRCarr(256)
m.Magic=HToInt('EDB88320')
For i=1 To 256
c=m.i-1
For j=1 To 8
If Int(m.c/2)#(m.c/2)
c=Bitrshift(m.c,1)
c=Bitxor(m.c,m.Magic)
Else
c=Bitrshift(m.c,1)
Endif

Endfor
CRCarr(m.i)=Iif(m.c<0,m.crc32+1+m.c,m.c)
ENDFOR
ENDIF

* Вычисление кода
Do Case
Case Type('m.string')='C'
For x=1 To Len(m.string)
m.x1=Asc(Substr(m.string,m.x,1))
m.crc32=Bitxor(Bitrshift(m.crc32,8),CRCarr(Bitxor(m.x1,Bitand(m.crc32,255))+1))
Endfor
Case Type('m.string')='N'
Do While !Feof(m.string)
m.x1=Asc(Fread(m.string,1))
m.crc32=Bitxor(Bitrshift(m.crc32,8),CRCarr(Bitxor(m.x1,Bitand(m.crc32,255))+1))
Enddo
Otherwise
Return ''
Endcase
Return IntToH(Bitxor(m.crc32,HToInt('FFFFFFFF')))
...
Рейтинг: 0 / 0
CRC32
    #35615898
Leonid_Riga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно еще так. На больших объемах быстрее будет.
Вызов для строки
?CRC32("AAAAA")
Вызов для файла
?CRC32(filetostr("MyFile.ext"))
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
Function CRC32
lparameter m.source_str

local m.kl, m.sl, m.hhnd, m.ptr, m.st2, m.tbl, m.rez
m.kl=len(m.source_str)

if !pemstatus(_screen,"crc32_ptr", 5 ) or _screen.crc32_ptr= 0 
	Declare Integer HeapCreate in Win32Api Integer, Integer, Integer
	Declare Integer HeapAlloc in Win32Api Integer, Integer, Integer
	Declare RtlMoveMemory in Win32API Integer, String, Integer cnt

	m.st2= ;
	chr(0x55)+chr(0x89)+chr(0xE5)+chr(0x57)+chr(0x56)+chr(0x50)+chr(0x53)+chr(0x51)+ ;
	chr(0x52)+chr(0x8B)+chr(0x75)+chr(0x08)+chr(0x8B)+chr(0x5D)+chr(0x0C)+chr(0x01)+ ;
	chr(0xF3)+chr(0x8B)+chr(0x7D)+chr(0x10)+chr(0x31)+chr(0xC0)+chr(0xF7)+chr(0xD0)+ ;
	chr(0x31)+chr(0xC9)+chr(0x39)+chr(0xDE)+chr(0x74)+chr(0x0D)+chr(0x8A)+chr(0x0E)+ ;
	chr(0x30)+chr(0xC1)+chr(0xC1)+chr(0xE8)+chr(0x08)+chr(0x33)+chr(0x04)+chr(0x8F)+ ;
	chr(0x46)+chr(0xEB)+chr(0xEF)+chr(0x8B)+chr(0x5D)+chr(0x14)+chr(0xF7)+chr(0xD0)+ ;
	chr(0x89)+chr(0x03)+chr(0x5A)+chr(0x59)+chr(0x5B)+chr(0x58)+chr(0x5E)+chr(0x5F)+ ;
	chr(0x89)+chr(0xEC)+chr(0x5D)+chr(0xC2)+chr(0x10)+chr(0x00)

	m.tbl= ;
	chr(0x00)+chr(0x00)+chr(0x00)+chr(0x00)+chr(0x96)+chr(0x30)+chr(0x07)+chr(0x77)+ ;
	chr(0x2C)+chr(0x61)+chr(0x0E)+chr(0xEE)+chr(0xBA)+chr(0x51)+chr(0x09)+chr(0x99)+ ;
	chr(0x19)+chr(0xC4)+chr(0x6D)+chr(0x07)+chr(0x8F)+chr(0xF4)+chr(0x6A)+chr(0x70)+ ;
	chr(0x35)+chr(0xA5)+chr(0x63)+chr(0xE9)+chr(0xA3)+chr(0x95)+chr(0x64)+chr(0x9E)+ ;
	chr(0x32)+chr(0x88)+chr(0xDB)+chr(0x0E)+chr(0xA4)+chr(0xB8)+chr(0xDC)+chr(0x79)+ ;
	chr(0x1E)+chr(0xE9)+chr(0xD5)+chr(0xE0)+chr(0x88)+chr(0xD9)+chr(0xD2)+chr(0x97)+ ;
	chr(0x2B)+chr(0x4C)+chr(0xB6)+chr(0x09)+chr(0xBD)+chr(0x7C)+chr(0xB1)+chr(0x7E)+ ;
	chr(0x07)+chr(0x2D)+chr(0xB8)+chr(0xE7)+chr(0x91)+chr(0x1D)+chr(0xBF)+chr(0x90)+ ;
	chr(0x64)+chr(0x10)+chr(0xB7)+chr(0x1D)+chr(0xF2)+chr(0x20)+chr(0xB0)+chr(0x6A)+ ;
	chr(0x48)+chr(0x71)+chr(0xB9)+chr(0xF3)+chr(0xDE)+chr(0x41)+chr(0xBE)+chr(0x84)+ ;
	chr(0x7D)+chr(0xD4)+chr(0xDA)+chr(0x1A)+chr(0xEB)+chr(0xE4)+chr(0xDD)+chr(0x6D)+ ;
	chr(0x51)+chr(0xB5)+chr(0xD4)+chr(0xF4)+chr(0xC7)+chr(0x85)+chr(0xD3)+chr(0x83)+ ;
	chr(0x56)+chr(0x98)+chr(0x6C)+chr(0x13)+chr(0xC0)+chr(0xA8)+chr(0x6B)+chr(0x64)+ ;
	chr(0x7A)+chr(0xF9)+chr(0x62)+chr(0xFD)+chr(0xEC)+chr(0xC9)+chr(0x65)+chr(0x8A)+ ;
	chr(0x4F)+chr(0x5C)+chr(0x01)+chr(0x14)+chr(0xD9)+chr(0x6C)+chr(0x06)+chr(0x63)+ ;
	chr(0x63)+chr(0x3D)+chr(0x0F)+chr(0xFA)+chr(0xF5)+chr(0x0D)+chr(0x08)+chr(0x8D)+ ;
	chr(0xC8)+chr(0x20)+chr(0x6E)+chr(0x3B)+chr(0x5E)+chr(0x10)+chr(0x69)+chr(0x4C)+ ;
	chr(0xE4)+chr(0x41)+chr(0x60)+chr(0xD5)+chr(0x72)+chr(0x71)+chr(0x67)+chr(0xA2)+ ;
	chr(0xD1)+chr(0xE4)+chr(0x03)+chr(0x3C)+chr(0x47)+chr(0xD4)+chr(0x04)+chr(0x4B)+ ;
	chr(0xFD)+chr(0x85)+chr(0x0D)+chr(0xD2)+chr(0x6B)+chr(0xB5)+chr(0x0A)+chr(0xA5)+ ;
	chr(0xFA)+chr(0xA8)+chr(0xB5)+chr(0x35)+chr(0x6C)+chr(0x98)+chr(0xB2)+chr(0x42)+ ;
	chr(0xD6)+chr(0xC9)+chr(0xBB)+chr(0xDB)+chr(0x40)+chr(0xF9)+chr(0xBC)+chr(0xAC)+ ;
	chr(0xE3)+chr(0x6C)+chr(0xD8)+chr(0x32)+chr(0x75)+chr(0x5C)+chr(0xDF)+chr(0x45)+ ;
	chr(0xCF)+chr(0x0D)+chr(0xD6)+chr(0xDC)+chr(0x59)+chr(0x3D)+chr(0xD1)+chr(0xAB)+ ;
	chr(0xAC)+chr(0x30)+chr(0xD9)+chr(0x26)+chr(0x3A)+chr(0x00)+chr(0xDE)+chr(0x51)+ ;
	chr(0x80)+chr(0x51)+chr(0xD7)+chr(0xC8)+chr(0x16)+chr(0x61)+chr(0xD0)+chr(0xBF)+ ;
	chr(0xB5)+chr(0xF4)+chr(0xB4)+chr(0x21)+chr(0x23)+chr(0xC4)+chr(0xB3)+chr(0x56)+ ;
	chr(0x99)+chr(0x95)+chr(0xBA)+chr(0xCF)+chr(0x0F)+chr(0xA5)+chr(0xBD)+chr(0xB8)+ ;
	chr(0x9E)+chr(0xB8)+chr(0x02)+chr(0x28)+chr(0x08)+chr(0x88)+chr(0x05)+chr(0x5F)+ ;
	chr(0xB2)+chr(0xD9)+chr(0x0C)+chr(0xC6)+chr(0x24)+chr(0xE9)+chr(0x0B)+chr(0xB1)+ ;
	chr(0x87)+chr(0x7C)+chr(0x6F)+chr(0x2F)+chr(0x11)+chr(0x4C)+chr(0x68)+chr(0x58)+ ;
	chr(0xAB)+chr(0x1D)+chr(0x61)+chr(0xC1)+chr(0x3D)+chr(0x2D)+chr(0x66)+chr(0xB6)+ ;
	chr(0x90)+chr(0x41)+chr(0xDC)+chr(0x76)+chr(0x06)+chr(0x71)+chr(0xDB)+chr(0x01)+ ;
	chr(0xBC)+chr(0x20)+chr(0xD2)+chr(0x98)+chr(0x2A)+chr(0x10)+chr(0xD5)+chr(0xEF)+ ;
	chr(0x89)+chr(0x85)+chr(0xB1)+chr(0x71)+chr(0x1F)+chr(0xB5)+chr(0xB6)+chr(0x06)+ ;
	chr(0xA5)+chr(0xE4)+chr(0xBF)+chr(0x9F)+chr(0x33)+chr(0xD4)+chr(0xB8)+chr(0xE8)+ ;
	chr(0xA2)+chr(0xC9)+chr(0x07)+chr(0x78)+chr(0x34)+chr(0xF9)+chr(0x00)+chr(0x0F)+ ;
	chr(0x8E)+chr(0xA8)+chr(0x09)+chr(0x96)+chr(0x18)+chr(0x98)+chr(0x0E)+chr(0xE1)+ ;
	chr(0xBB)+chr(0x0D)+chr(0x6A)+chr(0x7F)+chr(0x2D)+chr(0x3D)+chr(0x6D)+chr(0x08)+ ;
	chr(0x97)+chr(0x6C)+chr(0x64)+chr(0x91)+chr(0x01)+chr(0x5C)+chr(0x63)+chr(0xE6)+ ;
	chr(0xF4)+chr(0x51)+chr(0x6B)+chr(0x6B)+chr(0x62)+chr(0x61)+chr(0x6C)+chr(0x1C)+ ;
	chr(0xD8)+chr(0x30)+chr(0x65)+chr(0x85)+chr(0x4E)+chr(0x00)+chr(0x62)+chr(0xF2)+ ;
	chr(0xED)+chr(0x95)+chr(0x06)+chr(0x6C)+chr(0x7B)+chr(0xA5)+chr(0x01)+chr(0x1B)+ ;
	chr(0xC1)+chr(0xF4)+chr(0x08)+chr(0x82)+chr(0x57)+chr(0xC4)+chr(0x0F)+chr(0xF5)+ ;
	chr(0xC6)+chr(0xD9)+chr(0xB0)+chr(0x65)+chr(0x50)+chr(0xE9)+chr(0xB7)+chr(0x12)+ ;
	chr(0xEA)+chr(0xB8)+chr(0xBE)+chr(0x8B)+chr(0x7C)+chr(0x88)+chr(0xB9)+chr(0xFC)+ ;
	chr(0xDF)+chr(0x1D)+chr(0xDD)+chr(0x62)+chr(0x49)+chr(0x2D)+chr(0xDA)+chr(0x15)+ ;
	chr(0xF3)+chr(0x7C)+chr(0xD3)+chr(0x8C)+chr(0x65)+chr(0x4C)+chr(0xD4)+chr(0xFB)+ ;
	chr(0x58)+chr(0x61)+chr(0xB2)+chr(0x4D)+chr(0xCE)+chr(0x51)+chr(0xB5)+chr(0x3A)+ ;
	chr(0x74)+chr(0x00)+chr(0xBC)+chr(0xA3)+chr(0xE2)+chr(0x30)+chr(0xBB)+chr(0xD4)+ ;
	chr(0x41)+chr(0xA5)+chr(0xDF)+chr(0x4A)+chr(0xD7)+chr(0x95)+chr(0xD8)+chr(0x3D)+ ;
	chr(0x6D)+chr(0xC4)+chr(0xD1)+chr(0xA4)+chr(0xFB)+chr(0xF4)+chr(0xD6)+chr(0xD3)+ ;
	chr(0x6A)+chr(0xE9)+chr(0x69)+chr(0x43)+chr(0xFC)+chr(0xD9)+chr(0x6E)+chr(0x34)+ ;
	chr(0x46)+chr(0x88)+chr(0x67)+chr(0xAD)+chr(0xD0)+chr(0xB8)+chr(0x60)+chr(0xDA)+ ;
	chr(0x73)+chr(0x2D)+chr(0x04)+chr(0x44)+chr(0xE5)+chr(0x1D)+chr(0x03)+chr(0x33)+ ;
	chr(0x5F)+chr(0x4C)+chr(0x0A)+chr(0xAA)+chr(0xC9)+chr(0x7C)+chr(0x0D)+chr(0xDD)+ ;
	chr(0x3C)+chr(0x71)+chr(0x05)+chr(0x50)+chr(0xAA)+chr(0x41)+chr(0x02)+chr(0x27)+ ;
	chr(0x10)+chr(0x10)+chr(0x0B)+chr(0xBE)+chr(0x86)+chr(0x20)+chr(0x0C)+chr(0xC9)+ ;
	chr(0x25)+chr(0xB5)+chr(0x68)+chr(0x57)+chr(0xB3)+chr(0x85)+chr(0x6F)+chr(0x20)+ ;
	chr(0x09)+chr(0xD4)+chr(0x66)+chr(0xB9)+chr(0x9F)+chr(0xE4)+chr(0x61)+chr(0xCE)+ ;
	chr(0x0E)+chr(0xF9)+chr(0xDE)+chr(0x5E)+chr(0x98)+chr(0xC9)+chr(0xD9)+chr(0x29)+ ;
	chr(0x22)+chr(0x98)+chr(0xD0)+chr(0xB0)+chr(0xB4)+chr(0xA8)+chr(0xD7)+chr(0xC7)+ ;
	chr(0x17)+chr(0x3D)+chr(0xB3)+chr(0x59)+chr(0x81)+chr(0x0D)+chr(0xB4)+chr(0x2E)+ ;
	chr(0x3B)+chr(0x5C)+chr(0xBD)+chr(0xB7)+chr(0xAD)+chr(0x6C)+chr(0xBA)+chr(0xC0)
	
	m.tbl=m.tbl+ ;
	chr(0x20)+chr(0x83)+chr(0xB8)+chr(0xED)+chr(0xB6)+chr(0xB3)+chr(0xBF)+chr(0x9A)+ ;
	chr(0x0C)+chr(0xE2)+chr(0xB6)+chr(0x03)+chr(0x9A)+chr(0xD2)+chr(0xB1)+chr(0x74)+ ;
	chr(0x39)+chr(0x47)+chr(0xD5)+chr(0xEA)+chr(0xAF)+chr(0x77)+chr(0xD2)+chr(0x9D)+ ;
	chr(0x15)+chr(0x26)+chr(0xDB)+chr(0x04)+chr(0x83)+chr(0x16)+chr(0xDC)+chr(0x73)+ ;
	chr(0x12)+chr(0x0B)+chr(0x63)+chr(0xE3)+chr(0x84)+chr(0x3B)+chr(0x64)+chr(0x94)+ ;
	chr(0x3E)+chr(0x6A)+chr(0x6D)+chr(0x0D)+chr(0xA8)+chr(0x5A)+chr(0x6A)+chr(0x7A)+ ;
	chr(0x0B)+chr(0xCF)+chr(0x0E)+chr(0xE4)+chr(0x9D)+chr(0xFF)+chr(0x09)+chr(0x93)+ ;
	chr(0x27)+chr(0xAE)+chr(0x00)+chr(0x0A)+chr(0xB1)+chr(0x9E)+chr(0x07)+chr(0x7D)+ ;
	chr(0x44)+chr(0x93)+chr(0x0F)+chr(0xF0)+chr(0xD2)+chr(0xA3)+chr(0x08)+chr(0x87)+ ;
	chr(0x68)+chr(0xF2)+chr(0x01)+chr(0x1E)+chr(0xFE)+chr(0xC2)+chr(0x06)+chr(0x69)+ ;
	chr(0x5D)+chr(0x57)+chr(0x62)+chr(0xF7)+chr(0xCB)+chr(0x67)+chr(0x65)+chr(0x80)+ ;
	chr(0x71)+chr(0x36)+chr(0x6C)+chr(0x19)+chr(0xE7)+chr(0x06)+chr(0x6B)+chr(0x6E)+ ;
	chr(0x76)+chr(0x1B)+chr(0xD4)+chr(0xFE)+chr(0xE0)+chr(0x2B)+chr(0xD3)+chr(0x89)+ ;
	chr(0x5A)+chr(0x7A)+chr(0xDA)+chr(0x10)+chr(0xCC)+chr(0x4A)+chr(0xDD)+chr(0x67)+ ;
	chr(0x6F)+chr(0xDF)+chr(0xB9)+chr(0xF9)+chr(0xF9)+chr(0xEF)+chr(0xBE)+chr(0x8E)+ ;
	chr(0x43)+chr(0xBE)+chr(0xB7)+chr(0x17)+chr(0xD5)+chr(0x8E)+chr(0xB0)+chr(0x60)+ ;
	chr(0xE8)+chr(0xA3)+chr(0xD6)+chr(0xD6)+chr(0x7E)+chr(0x93)+chr(0xD1)+chr(0xA1)+ ;
	chr(0xC4)+chr(0xC2)+chr(0xD8)+chr(0x38)+chr(0x52)+chr(0xF2)+chr(0xDF)+chr(0x4F)+ ;
	chr(0xF1)+chr(0x67)+chr(0xBB)+chr(0xD1)+chr(0x67)+chr(0x57)+chr(0xBC)+chr(0xA6)+ ;
	chr(0xDD)+chr(0x06)+chr(0xB5)+chr(0x3F)+chr(0x4B)+chr(0x36)+chr(0xB2)+chr(0x48)+ ;
	chr(0xDA)+chr(0x2B)+chr(0x0D)+chr(0xD8)+chr(0x4C)+chr(0x1B)+chr(0x0A)+chr(0xAF)+ ;
	chr(0xF6)+chr(0x4A)+chr(0x03)+chr(0x36)+chr(0x60)+chr(0x7A)+chr(0x04)+chr(0x41)+ ;
	chr(0xC3)+chr(0xEF)+chr(0x60)+chr(0xDF)+chr(0x55)+chr(0xDF)+chr(0x67)+chr(0xA8)+ ;
	chr(0xEF)+chr(0x8E)+chr(0x6E)+chr(0x31)+chr(0x79)+chr(0xBE)+chr(0x69)+chr(0x46)+ ;
	chr(0x8C)+chr(0xB3)+chr(0x61)+chr(0xCB)+chr(0x1A)+chr(0x83)+chr(0x66)+chr(0xBC)+ ;
	chr(0xA0)+chr(0xD2)+chr(0x6F)+chr(0x25)+chr(0x36)+chr(0xE2)+chr(0x68)+chr(0x52)+ ;
	chr(0x95)+chr(0x77)+chr(0x0C)+chr(0xCC)+chr(0x03)+chr(0x47)+chr(0x0B)+chr(0xBB)+ ;
	chr(0xB9)+chr(0x16)+chr(0x02)+chr(0x22)+chr(0x2F)+chr(0x26)+chr(0x05)+chr(0x55)+ ;
	chr(0xBE)+chr(0x3B)+chr(0xBA)+chr(0xC5)+chr(0x28)+chr(0x0B)+chr(0xBD)+chr(0xB2)+ ;
	chr(0x92)+chr(0x5A)+chr(0xB4)+chr(0x2B)+chr(0x04)+chr(0x6A)+chr(0xB3)+chr(0x5C)+ ;
	chr(0xA7)+chr(0xFF)+chr(0xD7)+chr(0xC2)+chr(0x31)+chr(0xCF)+chr(0xD0)+chr(0xB5)+ ;
	chr(0x8B)+chr(0x9E)+chr(0xD9)+chr(0x2C)+chr(0x1D)+chr(0xAE)+chr(0xDE)+chr(0x5B)+ ;
	chr(0xB0)+chr(0xC2)+chr(0x64)+chr(0x9B)+chr(0x26)+chr(0xF2)+chr(0x63)+chr(0xEC)+ ;
	chr(0x9C)+chr(0xA3)+chr(0x6A)+chr(0x75)+chr(0x0A)+chr(0x93)+chr(0x6D)+chr(0x02)+ ;
	chr(0xA9)+chr(0x06)+chr(0x09)+chr(0x9C)+chr(0x3F)+chr(0x36)+chr(0x0E)+chr(0xEB)+ ;
	chr(0x85)+chr(0x67)+chr(0x07)+chr(0x72)+chr(0x13)+chr(0x57)+chr(0x00)+chr(0x05)+ ;
	chr(0x82)+chr(0x4A)+chr(0xBF)+chr(0x95)+chr(0x14)+chr(0x7A)+chr(0xB8)+chr(0xE2)+ ;
	chr(0xAE)+chr(0x2B)+chr(0xB1)+chr(0x7B)+chr(0x38)+chr(0x1B)+chr(0xB6)+chr(0x0C)+ ;
	chr(0x9B)+chr(0x8E)+chr(0xD2)+chr(0x92)+chr(0x0D)+chr(0xBE)+chr(0xD5)+chr(0xE5)+ ;
	chr(0xB7)+chr(0xEF)+chr(0xDC)+chr(0x7C)+chr(0x21)+chr(0xDF)+chr(0xDB)+chr(0x0B)+ ;
	chr(0xD4)+chr(0xD2)+chr(0xD3)+chr(0x86)+chr(0x42)+chr(0xE2)+chr(0xD4)+chr(0xF1)+ ;
	chr(0xF8)+chr(0xB3)+chr(0xDD)+chr(0x68)+chr(0x6E)+chr(0x83)+chr(0xDA)+chr(0x1F)+ ;
	chr(0xCD)+chr(0x16)+chr(0xBE)+chr(0x81)+chr(0x5B)+chr(0x26)+chr(0xB9)+chr(0xF6)+ ;
	chr(0xE1)+chr(0x77)+chr(0xB0)+chr(0x6F)+chr(0x77)+chr(0x47)+chr(0xB7)+chr(0x18)+ ;
	chr(0xE6)+chr(0x5A)+chr(0x08)+chr(0x88)+chr(0x70)+chr(0x6A)+chr(0x0F)+chr(0xFF)+ ;
	chr(0xCA)+chr(0x3B)+chr(0x06)+chr(0x66)+chr(0x5C)+chr(0x0B)+chr(0x01)+chr(0x11)+ ;
	chr(0xFF)+chr(0x9E)+chr(0x65)+chr(0x8F)+chr(0x69)+chr(0xAE)+chr(0x62)+chr(0xF8)+ ;
	chr(0xD3)+chr(0xFF)+chr(0x6B)+chr(0x61)+chr(0x45)+chr(0xCF)+chr(0x6C)+chr(0x16)+ ;
	chr(0x78)+chr(0xE2)+chr(0x0A)+chr(0xA0)+chr(0xEE)+chr(0xD2)+chr(0x0D)+chr(0xD7)+ ;
	chr(0x54)+chr(0x83)+chr(0x04)+chr(0x4E)+chr(0xC2)+chr(0xB3)+chr(0x03)+chr(0x39)+ ;
	chr(0x61)+chr(0x26)+chr(0x67)+chr(0xA7)+chr(0xF7)+chr(0x16)+chr(0x60)+chr(0xD0)+ ;
	chr(0x4D)+chr(0x47)+chr(0x69)+chr(0x49)+chr(0xDB)+chr(0x77)+chr(0x6E)+chr(0x3E)+ ;
	chr(0x4A)+chr(0x6A)+chr(0xD1)+chr(0xAE)+chr(0xDC)+chr(0x5A)+chr(0xD6)+chr(0xD9)+ ;
	chr(0x66)+chr(0x0B)+chr(0xDF)+chr(0x40)+chr(0xF0)+chr(0x3B)+chr(0xD8)+chr(0x37)+ ;
	chr(0x53)+chr(0xAE)+chr(0xBC)+chr(0xA9)+chr(0xC5)+chr(0x9E)+chr(0xBB)+chr(0xDE)+ ;
	chr(0x7F)+chr(0xCF)+chr(0xB2)+chr(0x47)+chr(0xE9)+chr(0xFF)+chr(0xB5)+chr(0x30)+ ;
	chr(0x1C)+chr(0xF2)+chr(0xBD)+chr(0xBD)+chr(0x8A)+chr(0xC2)+chr(0xBA)+chr(0xCA)+ ;
	chr(0x30)+chr(0x93)+chr(0xB3)+chr(0x53)+chr(0xA6)+chr(0xA3)+chr(0xB4)+chr(0x24)+ ;
	chr(0x05)+chr(0x36)+chr(0xD0)+chr(0xBA)+chr(0x93)+chr(0x06)+chr(0xD7)+chr(0xCD)+ ;
	chr(0x29)+chr(0x57)+chr(0xDE)+chr(0x54)+chr(0xBF)+chr(0x67)+chr(0xD9)+chr(0x23)+ ;
	chr(0x2E)+chr(0x7A)+chr(0x66)+chr(0xB3)+chr(0xB8)+chr(0x4A)+chr(0x61)+chr(0xC4)+ ;
	chr(0x02)+chr(0x1B)+chr(0x68)+chr(0x5D)+chr(0x94)+chr(0x2B)+chr(0x6F)+chr(0x2A)+ ;
	chr(0x37)+chr(0xBE)+chr(0x0B)+chr(0xB4)+chr(0xA1)+chr(0x8E)+chr(0x0C)+chr(0xC3)+ ;
	chr(0x1B)+chr(0xDF)+chr(0x05)+chr(0x5A)+chr(0x8D)+chr(0xEF)+chr(0x02)+chr(0x2D)

	m.hhnd=HeapCreate(0x40000, 2048 , 2048 )
	m.ptr=HeapAlloc(m.hhnd, 0 ,len(m.st2)+ 16 )
	RtlMoveMemory(m.ptr,m.st2,len(m.st2))
	_screen.addproperty("crc32_ptr",m.ptr)
	_screen.addproperty("crc32_tbl",m.tbl)
	
else
	m.ptr=_screen.crc32_ptr
	m.tbl=_screen.crc32_tbl
endif

m.rez=- 1 

Declare CallWindowProc in Win32API Integer, String, Integer, String tbl, Integer @rez
CallWindowProc(m.ptr, m.source_str, m.kl, m.tbl, @m.rez)

if m.rez< 0 
	m.rez=m.rez+ 2 ^ 32 
endif
return str(m.rez, 10 , 0 )
...
Рейтинг: 0 / 0
CRC32
    #35616996
XAndy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если действительно критична скорость, можно взять этот С-шный код, уже адаптированный для fll. Работать будет в любом фоксе, от fpd до vfp9

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
#include <string.h>
#include <stdlib.h>
#include "pro_ext.h"
//--------------------------------------------------------------------------
// CRC32 table
//--------------------------------------------------------------------------
static const long CRC32Table[ 256 ] =
{
0x00000000,0x77073096,0xee0e612c,0x990951ba,0x076dc419,0x706af48f,0xe963a535,
0x9e6495a3,0x0edb8832,0x79dcb8a4,0xe0d5e91e,0x97d2d988,0x09b64c2b,0x7eb17cbd,
0xe7b82d07,0x90bf1d91,0x1db71064,0x6ab020f2,0xf3b97148,0x84be41de,0x1adad47d,
0x6ddde4eb,0xf4d4b551,0x83d385c7,0x136c9856,0x646ba8c0,0xfd62f97a,0x8a65c9ec,
0x14015c4f,0x63066cd9,0xfa0f3d63,0x8d080df5,0x3b6e20c8,0x4c69105e,0xd56041e4,
0xa2677172,0x3c03e4d1,0x4b04d447,0xd20d85fd,0xa50ab56b,0x35b5a8fa,0x42b2986c,
0xdbbbc9d6,0xacbcf940,0x32d86ce3,0x45df5c75,0xdcd60dcf,0xabd13d59,0x26d930ac,
0x51de003a,0xc8d75180,0xbfd06116,0x21b4f4b5,0x56b3c423,0xcfba9599,0xb8bda50f,
0x2802b89e,0x5f058808,0xc60cd9b2,0xb10be924,0x2f6f7c87,0x58684c11,0xc1611dab,
0xb6662d3d,0x76dc4190,0x01db7106,0x98d220bc,0xefd5102a,0x71b18589,0x06b6b51f,
0x9fbfe4a5,0xe8b8d433,0x7807c9a2,0x0f00f934,0x9609a88e,0xe10e9818,0x7f6a0dbb,
0x086d3d2d,0x91646c97,0xe6635c01,0x6b6b51f4,0x1c6c6162,0x856530d8,0xf262004e,
0x6c0695ed,0x1b01a57b,0x8208f4c1,0xf50fc457,0x65b0d9c6,0x12b7e950,0x8bbeb8ea,
0xfcb9887c,0x62dd1ddf,0x15da2d49,0x8cd37cf3,0xfbd44c65,0x4db26158,0x3ab551ce,
0xa3bc0074,0xd4bb30e2,0x4adfa541,0x3dd895d7,0xa4d1c46d,0xd3d6f4fb,0x4369e96a,
0x346ed9fc,0xad678846,0xda60b8d0,0x44042d73,0x33031de5,0xaa0a4c5f,0xdd0d7cc9,
0x5005713c,0x270241aa,0xbe0b1010,0xc90c2086,0x5768b525,0x206f85b3,0xb966d409,
0xce61e49f,0x5edef90e,0x29d9c998,0xb0d09822,0xc7d7a8b4,0x59b33d17,0x2eb40d81,
0xb7bd5c3b,0xc0ba6cad,0xedb88320,0x9abfb3b6,0x03b6e20c,0x74b1d29a,0xead54739,
0x9dd277af,0x04db2615,0x73dc1683,0xe3630b12,0x94643b84,0x0d6d6a3e,0x7a6a5aa8,
0xe40ecf0b,0x9309ff9d,0x0a00ae27,0x7d079eb1,0xf00f9344,0x8708a3d2,0x1e01f268,
0x6906c2fe,0xf762575d,0x806567cb,0x196c3671,0x6e6b06e7,0xfed41b76,0x89d32be0,
0x10da7a5a,0x67dd4acc,0xf9b9df6f,0x8ebeeff9,0x17b7be43,0x60b08ed5,0xd6d6a3e8,
0xa1d1937e,0x38d8c2c4,0x4fdff252,0xd1bb67f1,0xa6bc5767,0x3fb506dd,0x48b2364b,
0xd80d2bda,0xaf0a1b4c,0x36034af6,0x41047a60,0xdf60efc3,0xa867df55,0x316e8eef,
0x4669be79,0xcb61b38c,0xbc66831a,0x256fd2a0,0x5268e236,0xcc0c7795,0xbb0b4703,
0x220216b9,0x5505262f,0xc5ba3bbe,0xb2bd0b28,0x2bb45a92,0x5cb36a04,0xc2d7ffa7,
0xb5d0cf31,0x2cd99e8b,0x5bdeae1d,0x9b64c2b0,0xec63f226,0x756aa39c,0x026d930a,
0x9c0906a9,0xeb0e363f,0x72076785,0x05005713,0x95bf4a82,0xe2b87a14,0x7bb12bae,
0x0cb61b38,0x92d28e9b,0xe5d5be0d,0x7cdcefb7,0x0bdbdf21,0x86d3d2d4,0xf1d4e242,
0x68ddb3f8,0x1fda836e,0x81be16cd,0xf6b9265b,0x6fb077e1,0x18b74777,0x88085ae6,
0xff0f6a70,0x66063bca,0x11010b5c,0x8f659eff,0xf862ae69,0x616bffd3,0x166ccf45,
0xa00ae278,0xd70dd2ee,0x4e048354,0x3903b3c2,0xa7672661,0xd06016f7,0x4969474d,
0x3e6e77db,0xaed16a4a,0xd9d65adc,0x40df0b66,0x37d83bf0,0xa9bcae53,0xdebb9ec5,
0x47b2cf7f,0x30b5ffe9,0xbdbdf21c,0xcabac28a,0x53b39330,0x24b4a3a6,0xbad03605,
0xcdd70693,0x54de5729,0x23d967bf,0xb3667a2e,0xc4614ab8,0x5d681b02,0x2a6f2b94,
0xb40bbe37,0xc30c8ea1,0x5a05df1b,0x2d02ef8d
};

//--------------------------------------------------------------------------
// Получить CRC32 строки
//
// FoxPro-интерфейс:
// Параметры   'C'  - исходная строка
// Возврат     'C'  - строка из  4  байт (unsigned long)
//--------------------------------------------------------------------------
void far CRC32(ParamBlk FAR *parm)
{
   BYTE FAR *instr, FAR *outstr;
   MHANDLE hand;
   Value val;
   DWORD len, crc = -1L;
   BIN bin;
   int i;

   // инициализация instr
   len = p0.ev_length;
   instr = _HandToPtr(p0.ev_handle);

   // подсчет CRC32
   while (len--) crc = CRC32Table[(BYTE)crc^(*instr++)] ^ (crc>>8);
   bin.ul = ~crc;

   // возвратить CRC32
   if ((hand = _AllocHand( 4 )) ==  0 ) _Error(OutMemory);
   _HLock(hand);
   outstr = _HandToPtr(hand);
   for (i= 0 ; i< 4 ; i++)  *(outstr++) = *(bin.c+i);

   val.ev_handle = hand;
   val.ev_length =  4 ;
   val.ev_type = 'C';
   _RetVal(&val);
   _HUnLock(hand);
}

//---------------------------------------------------------------------------
FoxInfo myFoxInfo[] =
{
  {"CRC32",    (FPFI) CRC32,      1 , "C"}           // CRC строки
};

FoxTable _FoxTable =
{
  (FoxTable FAR *) 0 , sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo
};
...
Рейтинг: 0 / 0
CRC32
    #35617307
Leonid_Riga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
XAndyЕсли действительно критична скорость, можно взять этот С-шный код
Конечно интересно было бы сравнить скорость на файлах порядка 100 - 500 Mb, но сдается мне , что мой метод будет чуток побыстрее, да и fll-ку лишнюю таскать не надо.
...
Рейтинг: 0 / 0
CRC32
    #35618080
XAndy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid_Rigaинтересно было бы сравнить скорость на файлах порядка 100 - 500 Mb, но сдается мне , что мой метод будет чуток побыстрее, да и fll-ку лишнюю таскать не надо.
Может и так. Вот скомпилил fll, можно попробовать ;) (только первый вызов игнорируй, кэширование и всё такое...). Встроенные в fll функции хороши прежде всего тем, что в фоксовском SQL воспринимаются как родные. Если SQL + нужна UDF + приличные объёмы данных, то это лучший выход.
...
Рейтинг: 0 / 0
CRC32
    #35619157
Leonid_Riga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Интересно получается. На 128 Mb мой метод дает ~1.2 с, метод с fll дает ~0.8 c. Если мой медод изменить так, что в функцию CallWindowProc передается не сама строка, а уже готовый пойнтер, то тогда требуется ~0.6 с (значит примерно 0.6 с тратится на создание второй копии строки при передаче в dll-ку), т.е. примерно то соотношение с fll-кой, которое я и предполагал. Единственное разумное объяснение этому, что fll-ка работает со строкой, не создавая второй ее копии. Неплохо бы это проверить. Если это верно, то тогда с помощью fll-ки можно написать быстрый аналог substr.
...
Рейтинг: 0 / 0
CRC32
    #35620392
XAndy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Леонид, тут и проверять нечего, я писал именно так, не создавая копию строки, а обрабатывая исходную ;)
Большинство функций так и делаю (особенно требующих высокой скорости, вроде шифрования). Недостаток - нельзя напрямую использовать с memo-полями (для memo обычно пишется функция-оболочка), впрочем это редко требуется.
...
Рейтинг: 0 / 0
CRC32
    #35620560
Leonid_Riga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да нет, тут не в этом дело. Когда строка передается в dll-ку (DECLARE ...), независимо, по значению или по ссылке, всегда создается ее копия, и dll-ка работает уже с копией строки. Если строка передавалась по ссылке, то результат затем копируется обратно в фоксовскую строку. У меня создалось впечатление, что fll-ка так не поступает, а работает с фоксовской строкой непосредственно. Если это так, то пожалуй на этом в некоторых случаях можно здорово сэкономить. Так, фоксовская SUBSTR тоже сначала копирует всю строку в новое место, а затем вызывает стандартную WinAPI функцию. Поэтому для больших строк использовать SUBSTR очень нерационально, особенно в цикле. Может быть с помощью fll эту проблему можно решить?
...
Рейтинг: 0 / 0
CRC32
    #35621041
XAndy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid_RigaУ меня создалось впечатление, что fll-ка так не поступает, а работает с фоксовской строкой непосредственно.
Зависит от программиста. Подразумевается, что програмер сам скопирует строку для обработки (в хелпе в примерах так и делается). Но можно этого и не делать:
Код: plaintext
1.
2.
3.
4.
5.
// получили указатель на строку-параметр
instr = _HandToPtr(p0.ev_handle);
// ...
// и там-же её обрабатываем
while (len--) crc = CRC32Table[(BYTE)crc^(*instr++)] ^ (crc>>8);
Можно как читать, так и писать в исходную строку, работает без проблем.
...
Рейтинг: 0 / 0
CRC32
    #35621293
Leonid_Riga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А почему Вы думаете, что получаете пойнтер на оригинал строки, а не на ее копию? Ведь поступив в точности так же с вызовом dll-ки через DECLARE, Вы получите пойнтер на копию строки.
...
Рейтинг: 0 / 0
CRC32
    #35622331
XAndy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Предполагаю. Иначе зачем во всех фоксовских примерах на С для строки-параметра выделяется новый кусок памяти и срока туда копируется? Кроме того, если бы в качестве параметров передавалась копия, то та функция crcr32 работала бы и с текстом, полученным из memo
...
Рейтинг: 0 / 0
CRC32
    #35624218
Leonid_Riga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
XAndyПредполагаю.
Хорошо бы проверить. Наверное проще всего - написать простенький fll-аналог SUBSTR. Функция принимает строку STR и число N, и возвращает ASCII код N-го символа строки. Если для достаточно больших строк (порядка 100 Kb) она будет работать заметно быстрее, чем встроенная фоксовская, то тогда действительно, копирования не происходит. Проверять можно на таком коде
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
clear
set talk off
m.str=space( 100000 )
m.sc=seconds()
for i= 1  to len(m.str)
	m.a=substr(m.str,i, 1 )
next
?seconds()-m.sc
Ну, и аналогичном для fll.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / CRC32
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]