| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1735 人关注过本帖
标题:字符串如何转换为十六进数?
取消只看楼主 加入收藏
Meixu
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2006-10-12
收藏
 问题点数:0 回复次数:6 
字符串如何转换为十六进数?

如何将这个字符串str[]="1234567890ABCDEF1234567890ABCDEF"
转换为A=0x12345678,B=0x90ABCDEF,C=0x12345678,D=0x90ABCDEF
这四个十六制数。

搜索更多相关主题的帖子: 字符 str 
2006-10-18 14:37
Meixu
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2006-10-12
收藏
得分:0 
以下是引用wfpb在2006-10-18 14:54:29的发言:
void atoi_ex(char *ch,int* &ans,int radix)
{
int num=sizeof(*ans)/sizeof(int);
int *arr=new int[num];
char *pCh=new char[9];
for(int i=0;i<num;i++)
{
strncpy(pCh,ch,8);
strcat(pCh,0);
arr[i]=atoi(pCh);
itoa(arr,pCh,radix);
ans[i]=atoi(pCh);
}
}

VC++编译通不过出现如下错误:
E:\C++文件\string01.cpp(14) : error C2664: 'itoa' : cannot convert parameter 1 from 'int *' to 'int'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast

是否把arr强制转换一下,这一行是否可改为itoa((int)arr,pCH,radix);
改了之后编译通过。


多看、多练、多写
2006-10-18 20:07
Meixu
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2006-10-12
收藏
得分:0 
以下是引用wfpb在2006-10-18 14:54:29的发言:
void atoi_ex(char *ch,int* &ans,int radix)
{
int num=sizeof(*ans)/sizeof(int);
int *arr=new int[num];
char *pCh=new char[9];
for(int i=0;i<num;i++)
{
strncpy(pCh,ch,8);
strcat(pCh,0);
arr[i]=atoi(pCh);
itoa(arr,pCh,radix);
ans[i]=atoi(pCh);
}
}

我对这段代码还是不怎么了解,只能把“12345678”转换为“0xBC614E”不能转换为所要的结果“0x12345678”,还有就是遇到字母(ABCDEF)就不能转换为数字了。


多看、多练、多写
2006-10-19 07:39
Meixu
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2006-10-12
收藏
得分:0 
以下是引用woodhead在2006-10-19 8:42:24的发言:
12345678(hex) = 305419896(dec) = 1*2^28 + 2*2^24 + 3*2^20 + 4*2^16 + 5*2^12 + 6*2^8 + 7*2^4 + 8*2^0 (dec)

首先说的“12345678”是一个字符串, 这个字符串有可能是“12ABCDEF”,不是一个十六进制数,这里是要把它转换成一个十六进制数。


多看、多练、多写
2006-10-19 13:18
Meixu
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2006-10-12
收藏
得分:0 
以下是引用aogun在2006-10-19 15:41:40的发言:

忙里偷闲,写了一个玩,代码风格有点过于正规,看不顺眼可以自己改
[CODE]void atox(char * szStr, unsigned int ** ppulHex, unsigned int * pulLength)
{
char szTmp[9];
int iCount = (strlen(szStr) / 8) + (strlen(szStr) % 8 > 0 ? 1 : 0);
int i, iLeft = strlen(szStr);
unsigned int * pulHex = NULL;
memset(szTmp, 0, sizeof(szTmp));
pulHex = new unsigned int[iCount];
if (! pulHex)
{
* ppulHex = NULL;
return;
}
for (i = 0; i < iCount; i ++)
{
strncpy(szTmp, szStr, 8 > iLeft ? iLeft : 8);
szTmp[szStr, 8 > iLeft ? iLeft : 8 + 1] = 0;
sscanf(szTmp, "%x", &pulHex[i]);
szStr += 8;
iLeft -= 8;
}
* ppulHex = pulHex;
* pulLength = iCount;
}[/CODE]


这段代码不知是如何把字符串代入这个atox 函数的。


多看、多练、多写
2006-10-19 20:14
Meixu
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2006-10-12
收藏
得分:0 
szTmp[szStr, 8 > iLeft ? iLeft : 8 + 1]是否可以把这行改为
szTmp[8 > iLeft ? iLeft : 9]或者szTmp[8 > iLeft ? iLeft : 8]
这几个结果显示好像是一个结果。


又在程序上增加了几行(让它更实用一点):
#define STRNUM 50

int main(void)
{
char str[STRNUM];
scanf("%s",str);
}
这样加不知怎么样?

[此贴子已经被作者于2006-10-20 13:49:51编辑过]


多看、多练、多写
2006-10-20 13:29
Meixu
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2006-10-12
收藏
得分:0 

#include <string.h>
#include <stdlib.h>
#include <stdio.h>

#define STRNUM 50

void atox(char * szStr, unsigned int ** ppulHex, unsigned int * pulLength)
{
char szTmp[3];
int iCount = (strlen(szStr) / 2) + (strlen(szStr) % 2 > 0 ? 1 : 0);
int i, iLeft = strlen(szStr);
unsigned int * pulHex = NULL;
memset(szTmp, 0, sizeof(szTmp));
pulHex = new unsigned int[iCount];
if (! pulHex)
{
* ppulHex = NULL;
return;
}
for (i = 0; i < iCount; i ++)
{
strncpy(szTmp, szStr, 2 > iLeft ? iLeft : 2);
szTmp[2 > iLeft ? iLeft : 2] = 0;
sscanf(szTmp, "%x", &pulHex[i]);
szStr += 2;
iLeft -= 2;
}
* ppulHex = pulHex;
* pulLength = iCount;
}

int main(void)
{
char str[STRNUM];
scanf("%s",str);
unsigned int * pHex = NULL;
unsigned int ulLength = 0, i;
atox(str, &pHex, &ulLength);
if (pHex)
{
for (i = 0; i < ulLength; i ++)
{
printf("0x%x\n", pHex[i]);
}
delete []pHex;
}
return 0;
}
通过这个程序学习了不少知识:
1、逗号运算符“,”,条件运算符“?:”,长度运算符“sizeof”,地址与运行符“&”,还有就是指向指针的指针等。
2、学习了strlen、memset、strncpy、sscanf、new和delete这些函数等。
程序稍微改了一下实现只取2位数的十六进制数,这里还谢谢aogun版主。

[此贴子已经被作者于2006-10-20 22:12:22编辑过]


多看、多练、多写
2006-10-20 22:06
快速回复:字符串如何转换为十六进数?
数据加载中...
 
   



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

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