字符“A”的ASCII码是0x41,若发送字符串“ABCDEFG”,采用8位的checksum校验,那应该发出什么字节流,校验字节是什么
时间: 2024-03-23 17:39:13 浏览: 81
发送字符串“ABCDEFG”采用8位的checksum校验时,应该发出以下字节流:
```
0x41 0x42 0x43 0x44 0x45 0x46 0x47 0x08
```
其中最后一个字节0x08是校验字节,它的值是字符串中所有字节的和(不包括校验字节)对256取余数的补码。也就是说,校验字节的计算方式如下:
```
checksum = ~(0x41 + 0x42 + 0x43 + 0x44 + 0x45 + 0x46 + 0x47) % 256 + 1
```
经过计算得到checksum的值为0xB8,但是由于checksum是校验字节的补码,因此实际上发送的字节是0x08,这个字节会在接收端进行校验,如果校验通过,则说明数据没有被篡改。
相关问题
C语言编写程序实现,对键盘输入的两个字符串进行比较,然后输出两个字符串中第一个不相同字符的ASCII码之差。例如,输入的两个字符串分别为“abcdefg”和“abceef”,则输出为-1。
好的,我来为您提供实现这个功能的代码。
```c
#include <stdio.h>
int main() {
char str1[100], str2[100];
int i, diff = 0;
printf("请输入第一个字符串:");
scanf("%s", str1);
printf("请输入第二个字符串:");
scanf("%s", str2);
for (i = 0; str1[i] && str2[i]; i++) {
if (str1[i] != str2[i]) {
diff = str1[i] - str2[i];
break;
}
}
if (diff == 0 && str1[i] != str2[i]) {
diff = str1[i] - str2[i];
}
printf("两个字符串第一个不相同字符的ASCII码之差为:%d\n", diff);
return 0;
}
```
在这个代码中,我们首先定义了两个名为 `str1` 和 `str2` 的字符数组,用于存储用户输入的两个字符串。然后,我们使用 `scanf()` 函数从键盘读取两个字符串。接着,我们使用一个 for 循环遍历两个字符串,当发现第一个不相同的字符时,我们就计算它们的 ASCII 码之差,并用 `break` 语句跳出循环。如果两个字符串的前缀部分完全相同,但是它们长度不同,我们也需要计算最后一个字符的 ASCII 码之差。最后,我们使用 `printf()` 函数输出两个字符串中第一个不相同字符的 ASCII 码之差。
希望这个回答可以帮助到您。
编写函数fun,对字符串的字符串,除首、尾字符外,将其余字符按ascii码降序排列。 例
对于输入字符串"abcdefg",函数fun的输出是"agfedcb"。具体实现思路如下:
首先将输入字符串除首、尾字符外的部分截取出来,即"bcdef"。然后将其转化为一个字符数组,按照ascii码的降序进行排序。这里可以借助Java语言中提供的Arrays.sort()方法来实现,也可以手写排序算法。
排序完成后,再将排好序的字符数组依次连接到首、尾两个字符上,最终得到的就是函数fun的输出。
Java代码实现如下:
public static String fun(String input) {
String middle = input.substring(1, input.length()-1);
char[] chars = middle.toCharArray();
Arrays.sort(chars);
StringBuilder result = new StringBuilder();
result.append(input.charAt(0));
for(int i=chars.length-1; i>=0; i--) {
result.append(chars[i]);
}
result.append(input.charAt(input.length()-1));
return result.toString();
}
测试代码如下:
public static void main(String[] args) {
System.out.println(fun("abcdefg")); //输出agfedcb
}
阅读全文