c语言ascii码转换为十进制的数值

现有数值大于127(十进制数)的16进制数 和 完整的ascii码(小于127的是ascii码,大于127是\x++), 最终想要 一个 这样的值转化为10进制数。要求是c语言。。。。。
我想要的是这么一个共同函数,参数为上述可能性的值,输出值为10进制数

#include <stdio.h>

int main() {
int arr[] = {'a','p','Q','oi','\0X89','\077'};
int i,n = sizeof(arr)/sizeof(arr[0]);
for(i = 0; i < n; ++i)
printf("%8d\to%-8o\t0X%-8X\n",arr[i],arr[i],arr[i]);
return 0;
}

追问

你列出了我说的字符的所有可能性,但是见问题补充

追答

/*

 97     O141            0X61

112     O160            0X70

 81     O121            0X51

105     O151            0X69

137     O211            0X89

 63     O77             0X3F

Press any key to continue

*/

#include <stdio.h>

int Change(unsigned char ch) {
return (int)ch;
}
 
int main() {
    unsigned char arr[] = {'a','p','Q','oi',0X89,'\077'};
    int i,num,n = sizeof(arr)/sizeof(arr[0]);
    for(i = 0; i < n; ++i) {
num = Change(arr[i]);
        printf("%3d\tO%-8o\t0X%-8X\n",num,num,num);
}
    return 0;
}

这还需要追问?只需把0x01添加到数组中即可。

/*

 97     O141            0X61

112     O160            0X70

 81     O121            0X51

111     O157            0X6F

137     O211            0X89

 63     O77             0X3F

  1     O1              0X1

Press any key to continue

*/

#include <stdio.h>
 
int Change(unsigned char ch) {
    return (int)ch;
}
  
int main() {
    unsigned char arr[] = {'a','p','Q','o',0X89,'\077',0X01};
    int i,num,n = sizeof(arr)/sizeof(arr[0]);
    for(i = 0; i < n; ++i) {
        num = Change(arr[i]);
        printf("%3d\tO%-8o\t0X%-8X\n",num,num,num);
    }
    return 0;
}

追问

不是这样子的,我接收的一个2字节的随机数,接收之后,有时候是一个逗号加一个16进制数,有时是一个中文字符,有时是一个汉字,我需要的是一个数

追答

如果这个发送数据的设备(或代码)是你自己能够控制的,建议你把命令、数据、信息以不同的起始字节来区分它们,并以结束命令宣告本次发送结束,这是设备间通讯的常规方式,远比只判断数据要可靠的多。当然,就你最后追问的内容来看,下面的代码也可以应付。

/*

0XA0

0X6

,

Press any key to continue

*/

#include <stdio.h>
#include <ctype.h>

void Change(unsigned char s[]) {
int num,i;
if(s[0] >= '0' && s[0] <= '9' || s[0] >= 'a' && s[0] <= 'f') { // 是数值
num = 0;
for(i = 0; s[i]; ++i) {
if(s[i] >= 'a')
num += 16 * num + s[i] - 'a';
else num += 16 * num + s[i] - '0';
}
printf("0X%X\n",num);
}
else if(s[0] > 0XFF) // 是汉字或全角标点
printf("%s\n",s);
else { // 是其他可打印字符
for(i = 0; s[i]; ++i) printf("%c",s[i]);
printf("\n");
}
}
   
int main() {
    unsigned char arr[5][3] = {"97","6","酷","。",","};
    int i,n = 5;
    for(i = 0; i < n; ++i)
        Change(arr[i]);
    return 0;
}

追问

change函数能返回int值么,打印出来,这值没法用了啊

追答

int Change(char s[],char t[],int *num);
函数不可能返回多种类型数据,变通的方法是,函数返回一个整形数,这个整数与传址方式的变量相对应,比如,返回0时,t[]包含一个字符串,返回1时,*num带回整形值。重新定义函数Change()这点活留给你吧。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-01-23
不清楚你要的是把字符串型的10进制数值转 整型 数,还是把 一个一个的 字节 编码 按 10进制 输出 出来。下面给出2 种。

#include <stdio.h>

int main()

{

char s[]="123456789";

char s2[]="12345678987654321"; // 当数值很大时 转 字长64位的 long long int

int i,v;

_int64 x;

sscanf(s,"%d",&v); // 字符串转int

printf("v=%d\n",v);

sscanf(s2,"%I64d", &x); // 字符串转int64

printf("x=%I64d\n", x);

//--------
for (i=0;i<strlen(s);i++) printf("byte%d: %d\n",i, s[i]);

return 0;

}

MS VC++ 6.0 编译器。
第2个回答  2014-01-23
#include <stdlib.h> // itoa() atoi()所需头文件
void main(void)
{
int number = 123456;
int n;
  int char string[25];
  int itoa(number, string, 10);// 整数number转换为字符串并放在 string[25]中;10表示为10进制
n = atoi(string); //把string字符串转换为int型
}
相似回答