注册 登录
编程论坛 VC++/MFC

如何将1.2.3.10这个格式的字符转换成DWORD,然后从DWORD转换成1.23.10字符?

◆华佗◆ 发布于 2016-02-16 12:49, 5914 次点击
很多这种格式的字符:如:
1.1.1
1.2.1.1
1.2.3.10
等需要转换成DWORD数字,
然后又需要从DWORD转换成1.1.1字符
8 回复
#2
天使梦魔2016-02-16 22:07
字符串转入string,组合下成员剔除点符号,然后用专门的字符转数字就可以了,不喜欢可以自己写,计算ascii码。
不喜欢string类的话可以用数组重新排序剔掉符号。

至于转回去?原本不就有字符么?
或者说某个数字转?
同样有字符转unsigned long的,还是不喜欢的话可以自己计算ascii码
#3
◆华佗◆2016-02-17 11:40
回复 2楼 天使梦魔
版主,我是个新手,您说的我不会
SQL = "SELECT * FROM FFF where sYY Like '%" + str + "%'" + " order by ID DESC"
数据库FFF字段sYY的数据格式是:
”1.1.1“
“1.3.15”
"1.2.1.16"
"1.1.1.15"
"1.1.1.10”等等

1:先要从数据库FFF调取字段sYY数据如:str=“1.1.1.15”等等放到tree中去
CString strsID;
int Rst[5];
HTREEITEM hSubItem[5];//
m_pRs.GetFieldValue(_T("sID"),strsID);//

CString   str;//
str=strsID;
      
DWORD dw;
ASSERT(dw == _ttoi64(str));
if (a==4 )
{
    hSubItem[0]=m_Tree1.InsertItem( strBTM, hParent );//
    m_Tree1.SetItemData(hSubItem[0], dw);;
}
if (a==8)
{
    hSubItem[1]=m_Tree1.InsertItem( strBTM,hSubItem[0] );//
    m_Tree1.SetItemData(hSubItem[1], dw);
}

不能直接把str放到m_Tree1.SetItemData(hSubItem[0],dw)中dw位置,只能把str转换成dw,
结果一转就只剩1了,点后面的数据都没有了;

2:需要从tree中取出先放的dw值,SQL要调用
CString str;
int a;
a=m_Tree1.GetItemData(hTreeCurrent);
str.Format(_T("%d"),a);

 
3:数据库FFF中sYY的字符格式是“1.1.1.16",SQL要调用str,所以“1.1.1.16"和先前的”1“格式不对,无法查询
    CString strConnection = _T("Provider=Microsoft.Jet.OLEDB.4.0;"
        "Data Source=" + strBudgetName + ";jet oledb:database password=" + strPassword);
    CString SQL;
    SQL = "SELECT * FROM FFF where sYY Like '%" + str + "%'" + " order by ID DESC";

所以需要先将“1.1.1.16"转换成dw,放入tree中,等到从tree中取出节点与数据库查询时,又要将节点转换成与数据库匹配的字符格式
#4
拉链2016-02-17 12:35
是不是ip地址?用联合体就能解决吧
#5
◆华佗◆2016-02-17 16:46
回复 4楼 拉链
不是IP地址
#6
天使梦魔2016-02-18 09:32
你转换的原因是因为“结果一转就只剩1了,点后面的数据都没有了;”?
我也不知道你想些什么。
当你把带3个点的东西转换成整形的时候你觉得哪种类型变量可以容纳3个点。
我之前的意思也就是这样了:
字符转整形,但你这种情况最起码也要4个DWORD来储存1个字符里的内容。DWORD是根据编译器定义的内联变量,一般都是无符号整形。
如果你要转换回来,也需要分别4次然后加点。


你的代码碎片没看懂什么意思,我唯一觉得奇怪的是为什么把字符转整形。
你要把字符串放到tree去,这个tree是什么没看懂,但是看到有m_Tree1.SetItemData。应该是某个控件的关联。
我估计你理解错了,这个关联不是直接关联内容,而是编号。关联后取值只给你编号,这个编号对应你的数据链。应该取的是数据库唯一ID部分,可能需要在数据库添加字段了,给每个内容增加一个编号。

如果你涉及字符转整形,你的思路就完全不对了,你要整形也可能需要做些什么,方便用于对比?计算操作?
#7
◆华佗◆2016-02-22 22:38
回复 6楼 天使梦魔
谢谢版主,我慢慢想办法。
#8
农民工2016-03-29 11:23
    int a[4];
    memset(a,0,sizeof(a));
    sscanf("1.2.3","%d.%d.%d.%d",a,a+1,a+2,a+3);
    unsigned int dw;
    unsigned char *pDw = (unsigned char *)&dw;
    for(int i=0; i<4; i++)
        pDw[i] = a[i];
#9
eagle1182016-04-28 21:22
楼主是想把字符串存到TreeItem的ItemData中?
几种办法
1、直接保存CString的指针。SetItemData(hItem,(DWORD)new CString(strID)),不过删除Item的时候需要记得删除对象,否则有内存泄露
2、转换成DWORD,这里关键是数值内有多大,有多少,如果每个数字都任意大,没法转,如果有限制,比如数值小于16,个数小于8,可以用保存下,具体问题得具体分析。
1