#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()这点活留给你吧。