如何将这个字符串str[]="1234567890ABCDEF1234567890ABCDEF"
转换为A=0x12345678,B=0x90ABCDEF,C=0x12345678,D=0x90ABCDEF
这四个十六制数。
如何将这个字符串str[]="1234567890ABCDEF1234567890ABCDEF"
转换为A=0x12345678,B=0x90ABCDEF,C=0x12345678,D=0x90ABCDEF
这四个十六制数。
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);
改了之后编译通过。
我对这段代码还是不怎么了解,只能把“12345678”转换为“0xBC614E”不能转换为所要的结果“0x12345678”,还有就是遇到字母(ABCDEF)就不能转换为数字了。
首先说的“12345678”是一个字符串, 这个字符串有可能是“12ABCDEF”,不是一个十六进制数,这里是要把它转换成一个十六进制数。
忙里偷闲,写了一个玩,代码风格有点过于正规,看不顺眼可以自己改
[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-20 13:49:51编辑过]
#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编辑过]