我想將以下內容轉換爲C#,但我沒有得到預期的結果。C++到C#代碼轉換類型
C++代碼:
DWORD CCSKW::GetCS(CString strFile)
{
try
{
CFile file(strFile, CFile::modeRead);
WORD wTemp = 0;
WORD wCS = 0;
const UINT uiMaxCharRead = 2000;
TCHAR c[uiMaxCharRead];
UINT uiCharRead;
#ifdef _UNICODE
while(uiCharRead = file.Read(c, uiMaxCharRead))
{
for(UINT i=0; i < uiCharRead; i++)
wCS ^= c[0];
}
#else
while(uiCharRead = file.Read(c, uiMaxCharRead))
{
for(UINT i=0; i < uiCharRead-1; i++)
{
wTemp = c[i];
i++;
wTemp <<= 8;
wTemp += c[i];
wCS ^= wTemp;
}
}
#endif
file.Close();
return (DWORD)wCS;
}
catch(CFileException *e)
{
e->ReportError();
e->Delete();
}
return 0;
}
簡單地說一下這個代碼的作用是讀取二進制文件的值,並返回。該值然後用於校驗和計算方法。
我的C#代碼:
public UInt32 GetCS()
{
try
{
ushort wTemp = 0;
ushort wCS = 0;
byte[] buffer = new byte[2000];
int count;
using (FileStream fs = new FileStream(csFile, FileMode.Open))
{
while ((count = fs.Read(buffer, 0, buffer.Length)) > 0)
{
for (int i = 0; i < count - 1; i++)
{
wTemp = buffer[i];
i++;
wTemp <<= 8;
wTemp += buffer[i];
wCS ^= wTemp;
}
}
}
return Convert.ToUInt32(wCS);
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
return 0;
}
我知道這可能是很難幫助不知道所有的代碼,但我只是想知道如果我在正確的軌道,或者如果我已經取得了一些明顯錯誤。
謝謝!
C#字符是Unicode。 –
我不確定這是否是您的問題,但爲了以防萬一想要引起您注意,在C#(和.NET中的所有字符串)中,所有字符串都是**總是**以UTF16編碼 – mvidelgauz
您可以共享二進制文件文件爲例? – aloisdg