T
testPC
Unregistered / Unconfirmed
GUEST, unregistred user!
有这样一段程序,与校验有关,需要转换成其它语言,现想知道UINT8的执行结果如何,与BYTE/CHAR类型的执行有无差别,请大家指教了。
代码如下:
VOID MakeCheckSumValue(CHAR *pMsg,WORD msgLen,CHAR pCheckNum[8])
{
UINT8 cTempVal[5],cTempCheckNum[9];
dword i, j;
memset(cTempVal,0x00,5);
memset(cTempCheckNum,0x00,9);
for (i = 0;
i < msgLen / 4;
i ++)
{
for (j = 0;
j < 4;
j ++)
cTempVal[j] ^= pMsg[i * 4 + j];
}
for (j = 0;
j < msgLen % 4;
j ++)
{
cTempVal[j] ^= pMsg[i * 4 + j];
}
for (i = 0;
i < 4;
i++)
cTempVal = ~cTempVal;
sprintf(cTempCheckNum, "%02X%02X%02X%02X", cTempVal[0], cTempVal[1],
cTempVal[2], cTempVal[3]);
memcpy(pCheckNum, cTempCheckNum, 8);
return;
}
偶是按以下方式手工计算的:
假设代入的字串为 1.00ZXW
初始数据: 00000000 00000000 00000000 00000000
1.00= 31 2E 30 30 00110001 00101110 00110000 00110000
第一次异或结果 00110001 00101110 00110000 00110000
ZXW = 5a 58 57 01011010 01011000 01010111
第二次异或结果 01101011 01110110 01100111 00110000
对最后结果求反 10010100 10001001 10011000 11001111
结果对应的十六进值 94 89 98 CF
我的理解是否有错误?哪位大哥可以开下C++环境帮偶算下?
如果结果与以上手工计算不同,可否把中间数据给偶,或告诉小弟要如何做?
小弟在此先谢了。
代码如下:
VOID MakeCheckSumValue(CHAR *pMsg,WORD msgLen,CHAR pCheckNum[8])
{
UINT8 cTempVal[5],cTempCheckNum[9];
dword i, j;
memset(cTempVal,0x00,5);
memset(cTempCheckNum,0x00,9);
for (i = 0;
i < msgLen / 4;
i ++)
{
for (j = 0;
j < 4;
j ++)
cTempVal[j] ^= pMsg[i * 4 + j];
}
for (j = 0;
j < msgLen % 4;
j ++)
{
cTempVal[j] ^= pMsg[i * 4 + j];
}
for (i = 0;
i < 4;
i++)
cTempVal = ~cTempVal;
sprintf(cTempCheckNum, "%02X%02X%02X%02X", cTempVal[0], cTempVal[1],
cTempVal[2], cTempVal[3]);
memcpy(pCheckNum, cTempCheckNum, 8);
return;
}
偶是按以下方式手工计算的:
假设代入的字串为 1.00ZXW
初始数据: 00000000 00000000 00000000 00000000
1.00= 31 2E 30 30 00110001 00101110 00110000 00110000
第一次异或结果 00110001 00101110 00110000 00110000
ZXW = 5a 58 57 01011010 01011000 01010111
第二次异或结果 01101011 01110110 01100111 00110000
对最后结果求反 10010100 10001001 10011000 11001111
结果对应的十六进值 94 89 98 CF
我的理解是否有错误?哪位大哥可以开下C++环境帮偶算下?
如果结果与以上手工计算不同,可否把中间数据给偶,或告诉小弟要如何做?
小弟在此先谢了。