第一个字符<<4 + 第二个字符
解决方案 »
- list:实现可伸缩
- 登录网站数据库的软件程序怎么写?
- 子对话框如何知道是否是被选中了?
- 请问有关COleTemplateServer::RegisterAll()的Debug Assertion Fail
- ASC码->BYTE?转换
- 求体检模型的算法
- 关于CListView
- 如何判断指针的值是否有效?
- CloseHandle(hProcess)和TerminateProcess(hProcess)有什么区别?
- 如何计算每秒传输的速率啊
- mfc CoCreateInstance 最后一个参数
- 我的VS安装了opencv2.4.4,但是运行一个程序是用OpenCV2.0.0,这样发生了错误,这个怎么改?
应该是 0x0A, 0x48, 0xdE 吧
strtoul
实际上你要实现的是把字符串里"A4"和"8d"提取出来,转换成数值型变量。
另外要注意两点:
0xeh是错误的,十六进制数没有h
char b[]={0xa4,0x8d,0xeh}这里,应该用无符号型unsigned char,
不然的话,有符号型char的取值范围是[-128,127],如果是0xEE的话,转换为10进制是238,238保存到有符号的char里显然会有点问题。
void Convert(const char *szStr, unsigned char *pBuf, int nBufSize)
{
char szTemp[3] = {0};
int nLen = strlen(szStr);
for (int i=0,j=0; i<nLen-1,j<nBufSize; i+=2,j++)
{
szTemp[0] = szStr[i];
szTemp[1] = szStr[i+1];
pBuf[j] = (unsigned char)strtoul(szTemp, NULL, 16);
}
}int main()
{
char szStr[]="A48dEa";
unsigned char Buf[3] = {0};
Convert(szStr, Buf, 3);
}
这里给出一个简单的例子,C标准实现
我还用下面的方法实现了一下,不知道还有更高效的方法吗?
for (i = 0; i<count; i++)
{
char tmp[3];
memset(tmp, 0, sizeof(tmp));
memcpy(tmp, szStr + i*2, 2);
sscanf_s(tmp, "%x", &buff[i], count);
}