输入一串字符串,保存在一个Buffer中,如:01 34 0E 0A 10 AB EC 回车结束
想把上述字符串存储在一个数组里,如下
a[] = { 0x01, 0x34,0x0e,0x0a,0x10,0xab,0xec );j
请高手快点解决一下,在线等
//#include "stdafx.h"//vc++6.0加上这一行.
#include "stdio.h"
void main(void){
char Buffer[90]="01340E0A10ABEC",i,j;
unsigned char Hex[45],xh;
printf("Type a string...\nStr=");
scanf("%s",Buffer);
for(j=i=0;Buffer[i];i++){
Hex[j]=((xh=Buffer[i++])>'9' ? xh>='a' ? xh-0x57 : xh-0x37 : xh-'0')<<4;
Hex[j++] |= (xh=Buffer[i])>'9' ? xh>='a' ? xh-0x57 : xh-0x37 : xh-'0';
}
for(i=0;i<j;printf("0x%02X ",Hex[i++]));
printf("\n");
}
你说的跟我想要的结果根本不一样,按你说的话,我就不用问了。
#include "stdio.h"
#include "string.h"
#include "math.h"
// 0 1 2 3 4 5 6 7 8 9 A B C D E F
// 0~9 48~57
// A~F 61~70
unsigned int hexToDec(char *str)
{
unsigned int i = 0;
unsigned int result = 0;
unsigned int tmp;
unsigned int len = strlen(str);
for(i = 0; i < len; i++)
{
if(str[i] >= 48 && str[i] <= 57)
{
tmp = str[i] - '0';
}
else if(str[i] >= 61 && str[i] <= 70)
{
tmp = str[i] - 'A' + 10;
}
else
{
printf("invalid hex %s\n",str);
return 0xFFFF;
}
result += tmp * pow(16,len-i-1);
}
return result;
}
int main()
{
char *input[] = {"01","34","0E","0A","10","AB","EC"};
int i = 0;
int result = 0;
int len = sizeof(input)/sizeof(char *);
for(i = 0; i < len; i++)
{
result = hexToDec(input[i]);
printf("%s in array is %x\n",input[i],result);
}
return 0;
}
unsigned char的数组
写个函数出来吧,我直接移进去 谢谢了
//ok了,有问题再问我~没问题了就采纳了吧 ~ 谢谢~
追问不用ASCII码转十六进制吗?
追答直接当做字符串处理就可以的。没有必要用ascii码转换十六进制。
追问我输入的是字符串,要输出的是十六进制数,
如:我输入的是 10+空格 他的ASCII码是 0x30 0x31 0x20,
不用ASCII码转十六进制吗?
你看看你上面描述的问题。
追问那可以按照我现在的需求再写一个函数吗
追答你描述的详细点 。 就现在的需求~
?
就是我现在有一个unsigned char 类型 buffer,会接受到外部传进来的字符串
如:01 34 0E 0A 10 AB EC
长度:不定长
回车结束
类型:ASCII
以上是输入。
期待输出结果保存在另外一个unsigned char类型的buffer中{ 0x01, 0x34,0x0e,0x0a,0x10,0xab,0xec }
我写的不就是吗???
你有试过我的代码吗?
完成相应功能不是就可以了?
干嘛非要ascii码的,你看看你的01转换成了0x01 34 转换成了0x34 你那里用到了ascii码了?