试题:
S 公司开发了一套物联网系统用于实现汽车生产线上各种设备之间信息的交互,设备间使用 ASCII 码格式的数据进行通信。为了保证通信安全传输,系统将设备间的交互数据转换成十六进制后再进行传输,转换规则为:
(1)取出将要传输字符 ASCII 码的十六进制形式,例如:“A”的 ASCII码对应的十六进制为“0x41”;
(2)采用按位置加权的方式将十六进制数进行变换,第 1 个数据权重为 1、第 2 个数据权为 2,以此类推...。例如:“A”如果为第 1 个要传输的数据,就将其变换为“0x42”(即:0x41+1=0x42);如果为第 2 个要传输的数据,就将其变换为“0x43”(即:0x41+2=0x43)
(3)将所有要传输数据变换后的结果进行累加求和,结果取低 8 位作为校验码放置在数据的最后。处理完成后进行数据传输。
一、具体代码
#include <stdio.h>
#include <string.h> //用于字符串函数如:gets函数和strlen()函数需要添加的头文件
unsigned int i;
unsigned int total=0; //累计求和变量
unsigned char arr[100]={}; //接收字符串数组
unsigned int check=0; //校验码变量
void main()
{
gets(arr);//接收字符串
for(i=0;i<strlen(arr);i++)
{
int c=arr[i]; //将字符转换为整型
total=total+c+i+1; //累计求每个字符对应的十六进制数据及对应的位权
//printf("%x,%x\n",c,total); //用于验证,可以不用添加
}
check=total & 0xff; //取低八位
printf("传输的数据为:%x%x",total,check); //最终输出效果
}