我想将以下内容转换为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