我现在正在处理一些遗留代码(将其中一些转换为c#),并且我偶然发现了一个问题:
创建一个字节数组(长度为ulcLen):
CSLAutoArray<BYTE> pMem(new BYTE[ulcLen]);
现在一些东西被放入字节数组,之后CRC/哈希值应该被写入前四个字节(ULONG/UInt32):
__CfgCRC(pMem + sizeof(ULONG), ulcLen - sizeof(ULONG))
->
inline ULONG __CfgCRC(const void* const cpcMem, const ULONG ulcMemSize)
{
ULONG ulRes = 0;
const BYTE* const cpcUseMem = reinterpret_cast<const BYTE*>(cpcMem);
for(const BYTE* pcLook = cpcUseMem; cpcUseMem + ulcMemSize > pcLook; pcLook++)
{
ulRes ^= static_cast<ULONG>(*pcLook);
//[...]
};
return ulRes;
};
现在,是只有我一个人,还是static_cast在for循环结束时读取字节数组末尾的1/2/3字节?由于pcLook(内存指针)增加,直到它达到数据的完整长度,(ulclen + sizeof(ULONG)) ?还是我错了?或者static_cast不知何故没有读取到数组的末尾?(CSLAutoArray是某种托管指针类,但据我所知,它不与此代码干扰)
*pcLook
只是一个BYTE
,所以不,它一次只读取1个八位字节。cast只是转换BYTE
而不是pcLock
所指向的。