免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 5820 | 回复: 31
打印 上一主题 下一主题

由于编码部分需要,求16进制与10进制数字之间的相互转换程序。 [复制链接]

lgwlgwlgw 该用户已被删除
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-01-05 23:21 |只看该作者 |倒序浏览
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
2 [报告]
发表于 2005-01-05 23:46 |只看该作者

由于编码部分需要,求16进制与10进制数字之间的相互转换程序。

又来这种帖子了。唉。
lgwlgwlgw 该用户已被删除
3 [报告]
发表于 2005-01-06 02:22 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2005-01-06 08:35 |只看该作者

由于编码部分需要,求16进制与10进制数字之间的相互转换程序。

有什么问题吗?为什么不自己实现一个?

论坛徽章:
0
5 [报告]
发表于 2005-01-06 08:43 |只看该作者

由于编码部分需要,求16进制与10进制数字之间的相互转换程序。

bool CXMLAnalysis::HexstrToBinary(string strHexContent, wchar_t* pNewBuf)
{
        int nLen = strHexContent.length();
        int i=0, j = 0;
        for (i=0; i<nLen; j++)        {
                unsigned char tmp = strHexContent.at(i);
                unsigned char btData;
                if (tmp>;='0' && tmp<='9')
                        btData = tmp-'0';
                else if (tmp>;='a' && tmp<='z')
                        btData = tmp-'a'+10;
                else if (tmp>;='A' && tmp<='Z')
                        btData = tmp-'A'+10;
                else
                        return false;
               
                btData <<= 4;
                tmp = strHexContent.at(++i);
                if (tmp>;='0' && tmp<='9')
                        btData += ((tmp-'0')&0x0F);
                else if (tmp>;='a' && tmp<='z')
                        btData += ((tmp-'a'+10)&0x0F);
                else if (tmp>;='A' && tmp<='Z')
                        btData += ((tmp-'A'+10)&0x0F);
                else
                        return false;
                i++;
                pNewBuf[j] = btData;
        }                  
        pNewBuf[j] = '\0';
        return true;
}

论坛徽章:
0
6 [报告]
发表于 2005-01-06 08:44 |只看该作者

由于编码部分需要,求16进制与10进制数字之间的相互转换程序。

要把这个类型,换掉呀,wchar_t*
或者改一下上面的代码,达到你要的效果

论坛徽章:
0
7 [报告]
发表于 2005-01-06 08:45 |只看该作者

由于编码部分需要,求16进制与10进制数字之间的相互转换程序。

  1. bool CXMLAnalysis::HexstrToBinary(string strHexContent, wchar_t* pNewBuf)
  2. {
  3.         int nLen = strHexContent.length();
  4.         int i=0, j = 0;
  5.         for (i=0; i<nLen; j++)        {
  6.                 unsigned char tmp = strHexContent.at(i);
  7.                 unsigned char btData;
  8.                 if (tmp>;='0' && tmp<='9')
  9.                         btData = tmp-'0';
  10.                 else if (tmp>;='a' && tmp<='z')
  11.                         btData = tmp-'a'+10;
  12.                 else if (tmp>;='A' && tmp<='Z')
  13.                         btData = tmp-'A'+10;
  14.                 else
  15.                         return false;
  16.                
  17.                 btData <<= 4;
  18.                 tmp = strHexContent.at(++i);
  19.                 if (tmp>;='0' && tmp<='9')
  20.                         btData += ((tmp-'0')&0x0F);
  21.                 else if (tmp>;='a' && tmp<='z')
  22.                         btData += ((tmp-'a'+10)&0x0F);
  23.                 else if (tmp>;='A' && tmp<='Z')
  24.                         btData += ((tmp-'A'+10)&0x0F);
  25.                 else
  26.                         return false;
  27.                 i++;
  28.                 pNewBuf[j] = btData;
  29.         }                  
  30.         pNewBuf[j] = '\0';
  31.         return true;
  32. }
复制代码

学发贴,看看这样能不能保留缩进

论坛徽章:
0
8 [报告]
发表于 2005-01-06 09:37 |只看该作者

由于编码部分需要,求16进制与10进制数字之间的相互转换程序。

如果是“小”数,直接sscanf或者strtol就行了。
如果是“大”数,那必须有一个大数运算库。
不过我觉得很奇怪,如果连大数运算都能自己实现了,一个小小的进制转换都不会?
如果使用别人的大数运算库,比如libgmp,那么更省事了。

论坛徽章:
0
9 [报告]
发表于 2005-01-06 10:01 |只看该作者

由于编码部分需要,求16进制与10进制数字之间的相互转换程序。


  1. int dec2hex(int dec,char *hex,int byte)
  2. {
  3. int t=byte-1,loop,dig;
  4. int flag;
  5. if(byte<1){
  6. return -1;
  7. }
  8. if(dec<0){
  9. flag=1;
  10. dec=-dec;
  11. }
  12. else{
  13. flag=0;
  14. }
  15. do{
  16. dig=dec%16;
  17. hex[t]="0123456789ABCDEF"[dig];
  18. dec=dec/16;
  19. t--;
  20. }while(dec!=0&&t>;=0);
  21. if(t<-1){
  22. return -1;
  23. }
  24. if(flag){
  25. hex[t]='-';
  26. t--;
  27. }
  28. if(t!=-1){
  29. for(loop=t+1;loop<byte;loop++){
  30. hex[loop-t-1]=hex[loop];
  31. }
  32. hex[loop-t-1]=0;/*the '\0' character*/
  33. }
  34. return 1;
  35. }



复制代码

算法按照10进制换算16进制的基本取余法.
一个素数怎么分解成两个素数之积呀?

论坛徽章:
0
10 [报告]
发表于 2005-01-06 10:08 |只看该作者

由于编码部分需要,求16进制与10进制数字之间的相互转换程序。

对于小数字,有标准函数,为什么不用呢????
int i;
sscanf("1f","%x",&i);

i=strtol("1f",NULL,16);
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP