我也許應該只是把這個都在同一個問題,對不起爲:(需要多一點幫助,從VB.NET轉換CRC功能,C#
二錯誤
好吧,這應該是錯誤的端部(希望):
private static string getCRC(string input, bool appendDate)
{
string toEnc = string.Format("{0}{1}", input, appendDate == true ? string.Format("{0:yyyyMMdd}", System.DateTime.Now) : "");
System.IO.MemoryStream mStream = new System.IO.MemoryStream(System.Text.ASCIIEncoding.ASCII.GetBytes(toEnc), false);
CRC32 oCRC = new CRC32();
return oCRC.GetCrc32(((System.IO.Stream)mStream)).ToString();
}
錯誤是在迴流管線:
編譯器錯誤消息: CS1502:爲了獲得最佳重載方法匹配「CRC.CRC32.GetCrc32(參照System.IO.Stream)」具有一些無效參數
下面是函數它指的是:
public UInt32 GetCrc32(ref System.IO.Stream stream)
{
//Dim crc32Result As Integer = &HFFFFFFFF
UInt32 crc32Result = UInt32.MaxValue;
try
{
byte[] buffer = new byte[BUFFER_SIZE];
int readSize = BUFFER_SIZE;
int count = stream.Read(buffer, 0, readSize);
int i;
UInt32 iLookup;
//Dim tot As Integer = 0
while ((count > 0))
{
for (i = 0; i <= count - 1; i++)
{
iLookup = (crc32Result & 0xff)^buffer[i];
//crc32Result = ((crc32Result And &HFFFFFF00) \ &H100) And &HFFFFFF ' nasty shr 8 with vb :/
crc32Result = ((UInt32)((crc32Result & 4294967040L)/256) & UInt32.MaxValue);
// nasty shr 8 with vb :/
crc32Result = crc32Result^crc32Table[iLookup];
}
count = stream.Read(buffer, 0, readSize);
}
}
catch (Exception ex)
{
HttpContext.Current.Response.Output.Write(string.Format("{0}{1}{2}", ex.Message, Environment.NewLine, ex.StackTrace));
System.Diagnostics.Debugger.Break();
}
return (~crc32Result);
}
正如你所看到的,我試圖將流媒體視爲一個流,但我不認爲它太喜歡。
第一個錯誤
如果您還沒有看到我的最後幾個問題,我已經寫在VB.NET一個CRC功能。我使用在線轉換器將其轉換爲C#。這裏是原始的VB代碼:
Public Sub New()
Dim dwPolynomial As UInt32 = 3988292384
Dim i As Integer, j As Integer
ReDim crc32Table(256)
Dim dwCrc As UInt32
For i = 0 To 255
dwCrc = i
For j = 8 To 1 Step -1
If (dwCrc And 1) Then
dwCrc = ((dwCrc And &HFFFFFFFE) \ 2&) And &H7FFFFFFF
dwCrc = dwCrc Xor dwPolynomial
Else
dwCrc = ((dwCrc And &HFFFFFFFE) \ 2&) And &H7FFFFFFF
End If
Next j
crc32Table(i) = dwCrc
Next i
End Sub
這是我的轉換代碼。我定了幾個我有錯誤的,但也有一些更多的,我想不通:
public CRC32()
{
UInt32 dwPolynomial = ((UInt32)3988292384L);
int i;
int j;
UInt32[] crc32Table;
crc32Table = new UInt32[256];
UInt32 dwCrc;
for (i = 0; i <= 255; i++)
{
dwCrc = ((UInt32)i);
for (j = 8; j >= 1; j -= 1)
{
if ((dwCrc & 1))
{
dwCrc = ((dwCrc & 0xfffffffe)/2L) & 0x7fffffff;
dwCrc = dwCrc^dwPolynomial;
}
else
{
dwCrc = ((dwCrc & 0xfffffffe)/2L) & 0x7fffffff;
}
}
crc32Table[i] = dwCrc;
}
}
第一個錯誤是在這條線:
編譯器錯誤信息: CS0030:無法將類型 'UINT' 到 '布爾'
if ((dwCrc & 1))
我應該比較這兩個值與不同的運算符?我不太確定爲什麼&
運營商是誠實的。
謝謝。
你的VB.NET代碼有錯誤。 ReDim crc32Table(256)給你25 * 7 *的條目,但你只填寫256.轉換搞砸了(正確的C#相當於新的uint [257]),但實際上它適合你的情況。 ;) – 2009-07-24 20:17:01