0
我在一些遺留代碼一起工作,現在(的一些將其轉換爲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讀取字節數組末尾的1/2/3字節,在for循環結束?由於pcLook(內存指針)增加,直到達到數據的全長,(ulclen + sizeof(ULONG))?或者我錯了?或者static_cast以某種方式不讀取數組的結尾? (CSLAutoArray是某種管理指針類,但據我看它不會干擾此代碼)
OKAY !!!那麼它如何將1個字節投射到4?這意味着所得到的ULONG也只能有最大值255? – pixartist
通常'BYTE'是'unsigned char',所以它將零擴展爲'ULONG'的大小......是的,它的值範圍仍然是{0 ... 255}。 – mark