http://forum.ragezone.com/f144/changing-crc32-code-875483/
Original en vb
Código:
Option Explicit On
Option Strict On
<System.Diagnostics.DebuggerStepThrough()> _
Friend Class CRC32
Private crc32Table() As Integer
Private Const BUFFER_SIZE As Integer = 1024I
Friend Function GetCrc32(ByRef stream As System.IO.FileStream) As Integer
Dim crc32Result As Integer = &HFFFFFFFF
Dim buffer(BUFFER_SIZE) As Byte
Dim readSize As Integer = BUFFER_SIZE
Dim count As Integer = stream.Read(buffer, 0I, readSize)
Dim i As Integer
Dim iLookup As Integer
Do While (count > 0I)
For i = 0I To count - 1I
iLookup = (crc32Result And &HFF) Xor buffer(i)
crc32Result = ((crc32Result And &HFFFFFF00) \ &H100) And &HFFFFFF ' nasty shr 8 with vb :/
crc32Result = crc32Result Xor crc32Table(iLookup)
Next i
count = stream.Read(buffer, 0I, readSize)
Loop
Return Not (crc32Result)
End Function
Friend Function GetCrc32String(ByRef stream As System.IO.FileStream) As String
Return String.Format("{0:X8}", GetCrc32(stream))
End Function
Friend Sub New()
' This is the official polynomial used by CRC32 in PKZip.
' Often the polynomial is shown reversed (04C11DB7).
Dim dwPolynomial As Integer = &HEDB88320
Dim i, j As Integer
ReDim crc32Table(256I)
Dim dwCrc As Integer
For i = 0I To 255I
dwCrc = i
For j = 8I To 1I Step -1I
If (dwCrc And 1I) > 0I Then
dwCrc = ((dwCrc And &HFFFFFFFE) \ 2I) And &H7FFFFFFF
dwCrc = dwCrc Xor dwPolynomial
Else
dwCrc = ((dwCrc And &HFFFFFFFE) \ 2I) And &H7FFFFFFF
End If
Next j
crc32Table(i) = dwCrc
Next i
End Sub
End Class
Lo que pasea c++
Código:
#include <fstream>
#include <iostream>
using namespace std;
const int BUFFERSIZE1 = 1024;
class CRC32
{
private:
int crc32Table[];
//const int BUFFERSIZE1 = 1024;
int GetCrc32(ifstream& stream)
{
int crc32Result = 0xFFFFFFFF;
BYTE buffer[BUFFERSIZE1];
int readSize = BUFFERSIZE1;
//stream.read( (char*)buffer, readSize);
int count = stream.get();
int i;
int iLookup;
while (count > 0)
{
for(i = 0; i<= count - 1;i++)
{
iLookup = (crc32Result & 0xFF) ^ buffer[i];
crc32Result = 5; //((crc32Result & 0xFFFFFF00) \ 0x100) & 0xFFFFFF;/*1*/
crc32Result = crc32Result ^ crc32Table[iLookup];
}
//stream.read(buffer, readSize);
count = stream.get();
}
return !(crc32Result);
}
const char* GetCrc32String(ofstream& stream)
{
//Return String.Format("{0:X8}", GetCrc32(stream))
return NULL;
}
void New(){
//' This is the official polynomial used by CRC32 in PKZip.
//' Often the polynomial is shown reversed (04C11DB7).
int dwPolynomial = 0xEDB88320;
int i, j;
int crc32Table[256];
int dwCrc;
for(i = 0; i<256;i++)
{
dwCrc = i;
for(j = 8; j>-1; j--)
{
if((dwCrc & 1) > 0)
{
dwCrc = 5;//((dwCrc & 0xFFFFFFFE) \ 2) & 0x7FFFFFFF;/*2*/
dwCrc = dwCrc ^ dwPolynomial;
}
else
{
dwCrc = 5; //((dwCrc & 0xFFFFFFFE) \ 2) & 0x7FFFFFFF;/*3*/
}
}
crc32Table[i] = dwCrc;
}
}
};
las lineas que marque con /*numero*/ son las que el compilador me dice "illegal escape sequence", me ayudarian?