我们现在得到是蓝牙地址的一个字符串,
比如:CString str_btAddr = "0080376905f1";
BT_ADDR bt_addr; (BT_ADDR 是ULONGLONG 类型的)
................
要的结果是:bt_addr = 0x0080376905f1
请问有什么函数可以实现啊?有一个笨的方法那就是字符串一个个取出来,乘于16转换,再相加,但那样太麻烦了。请教各位有什么简单的方法吗?
比如:CString str_btAddr = "0080376905f1";
BT_ADDR bt_addr; (BT_ADDR 是ULONGLONG 类型的)
................
要的结果是:bt_addr = 0x0080376905f1
请问有什么函数可以实现啊?有一个笨的方法那就是字符串一个个取出来,乘于16转换,再相加,但那样太麻烦了。请教各位有什么简单的方法吗?
解决方案 »
- VC对话框去掉标题栏后为什么使用UpdateData貌似没作用啊
- 跪求 API写的Combo box 程序
- DLL使用?
- ListCtrl或ListView如何实现鼠标多选?
- 如何枚举当前系统的所有进程(高手指点)
- 如何改CTabCtrl的背景色
- 怎样改变一个窗体上所有按钮的颜色???
- 编译时出现c:\program files\microsoft visual studio\vc98\include\winsock2.h(99) : error C2011: 'fd_set' : 'struct' type redefinition
- MFC
- 问:怎样去掉用AppWizard生成的单文档结构的菜单?(VC++)
- 求一个设计思路
- 关于采样分析的问题~
1 = '1' - '0';另,boost里边有个专门的cast模版,但是不知到能不能处理ULONGLONG
char *pCursor=szAddr;bt_addr=*pCursor++;
char ch;
while(ch=*pCursor)
{
bt_addr<<=4;
bt_addr|=ch;
pCursor++;
}
to:chehw(chehw) 我试了一下你的那段,
出来的 bt_addr = 901269753116529
感觉跟这个0080376905f1没有什么关系。
ULONGLONG a;
CString str_btAddr = L"008037690511";
swscanf((LPCTSTR)str_btAddr, L"%I64d", &a);
BT_ADDR bd_addr = a;
出来a = 8037690511;
如果CString str_btAddr = L"008037690f11";
出来a = 8037690;
我想应该是"%I64d的问题。
char *pCursor=szAddr;char ch;
ch=*pCursor++;
if(ch>='0' && ch<='9')
{
ch-=0x30;
}else
{
ch&=~0x20;
ch-=0x41;
ch+=10;
}
bt_addr=ch;while(ch=*pCursor)
{
bt_addr<<=4;
if(ch>='0' && ch<='9')
{
ch-=0x30;
}else
{
ch&=~0x20;
ch-=0x41;
ch+=10;
}
bt_addr|=ch;
pCursor++;
}
我刚刚也在写了点没完整,看来算法才是最重要的,是程序员的灵魂,以后多像你学习。还问一下,你上边这代码是得到10进制的数,我把它转成16进制的数,
bt_addr = 80376905f1;
但我怎么样才能在前边在添两个0,和0x,使它是:bt_addr = 0x80376905f1;
因为蓝牙地址是严格按照这样来的。
用以下的代码也是可以实现的.
ULONGLONG a;
BT_ADDR bd_addr;
CString str_btAddr = L"0080376905f1";
swscanf((LPCTSTR)str_btAddr, L"%I64x", &a);
结帖了.