| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6342 人关注过本帖
标题:如何将1.2.3.10这个格式的字符转换成DWORD,然后从DWORD转换成1.23.10字符?
只看楼主 加入收藏
◆华佗◆
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2006-12-31
结帖率:0
收藏
已结贴  问题点数:10 回复次数:8 
如何将1.2.3.10这个格式的字符转换成DWORD,然后从DWORD转换成1.23.10字符?
很多这种格式的字符:如:
1.1.1
1.2.1.1
1.2.3.10
等需要转换成DWORD数字,
然后又需要从DWORD转换成1.1.1字符
搜索更多相关主题的帖子: 如何 
2016-02-16 12:49
天使梦魔
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:37
帖 子:564
专家分:2754
注 册:2007-8-29
收藏
得分:5 
字符串转入string,组合下成员剔除点符号,然后用专门的字符转数字就可以了,不喜欢可以自己写,计算ascii码。
不喜欢string类的话可以用数组重新排序剔掉符号。

至于转回去?原本不就有字符么?
或者说某个数字转?
同样有字符转unsigned long的,还是不喜欢的话可以自己计算ascii码
2016-02-16 22:07
◆华佗◆
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2006-12-31
收藏
得分:0 
回复 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中取出节点与数据库查询时,又要将节点转换成与数据库匹配的字符格式
2016-02-17 11:40
拉链
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:107
专家分:534
注 册:2016-1-22
收藏
得分:5 
是不是ip地址?用联合体就能解决吧
2016-02-17 12:35
◆华佗◆
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2006-12-31
收藏
得分:0 
回复 4楼 拉链
不是IP地址
2016-02-17 16:46
天使梦魔
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:37
帖 子:564
专家分:2754
注 册:2007-8-29
收藏
得分:0 
你转换的原因是因为“结果一转就只剩1了,点后面的数据都没有了;”?
我也不知道你想些什么。
当你把带3个点的东西转换成整形的时候你觉得哪种类型变量可以容纳3个点。
我之前的意思也就是这样了:
字符转整形,但你这种情况最起码也要4个DWORD来储存1个字符里的内容。DWORD是根据编译器定义的内联变量,一般都是无符号整形。
如果你要转换回来,也需要分别4次然后加点。


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

如果你涉及字符转整形,你的思路就完全不对了,你要整形也可能需要做些什么,方便用于对比?计算操作?
2016-02-18 09:32
◆华佗◆
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2006-12-31
收藏
得分:0 
回复 6楼 天使梦魔
谢谢版主,我慢慢想办法。
2016-02-22 22:38
农民工
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:21
帖 子:109
专家分:639
注 册:2015-8-22
收藏
得分:0 
    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];
2016-03-29 11:23
eagle118
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2016-4-28
收藏
得分:0 
楼主是想把字符串存到TreeItem的ItemData中?
几种办法
1、直接保存CString的指针。SetItemData(hItem,(DWORD)new CString(strID)),不过删除Item的时候需要记得删除对象,否则有内存泄露
2、转换成DWORD,这里关键是数值内有多大,有多少,如果每个数字都任意大,没法转,如果有限制,比如数值小于16,个数小于8,可以用保存下,具体问题得具体分析。
2016-04-28 21:22
快速回复:如何将1.2.3.10这个格式的字符转换成DWORD,然后从DWORD转换成1.23.10字 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026015 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved