【发布时间】:2010-12-07 21:18:18
【问题描述】:
我有一个字符串,我可以像这样计算一个 sha1 摘要:
SHA1(sn, snLength, sha1Bin);
如果我是正确的,这会产生一个 20 字节的字符(带有二进制数据)。我想将此字符的最后 3 个字节与另一个字符进行比较。此字符包含字符串“6451E6”。 64、51 和 E6 是十六进制值。如何转换“6451E6”以便我可以通过以下方式进行比较:
if(memcmp(&sha1Bin[(20 - 3)], theVarWithHexValues, 3) == 0)
{
}
我有这个功能:
/*
* convert hexadecimal ssid string to binary
* return 0 on error or binary length of string
*
*/
u32 str2ssid(u8 ssid[],u8 *str) {
u8 *p,*q = ssid;
u32 len = strlen(str);
if( (len % 2) || (len > MAX_SSID_OCTETS) )
return(0);
for(p = str;(*p = toupper(*p)) && (strchr(hexTable,*p)) != 0;) {
if(--len % 2) {
*q = ((u8*)strchr(hexTable,*p++) - hexTable);
*q <<= 4;
} else {
*q++ |= ((u8*)strchr(hexTable,*p++) - hexTable);
}
}
return( (len) ? 0 : (p - str) / 2);
}
这也是一样的,但我是 C 新手,不理解它:-(
【问题讨论】: