工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1967|回复: 1

Linux下编程入门-- 计算"校验和"小程序

[复制链接]
发表于 2008-7-1 16:16 | 显示全部楼层 |阅读模式
GPS模块设置的时候需要计算校验和(各个字符进行"异或"操作), 写在设置程序里太麻烦了, 我就把这部分单独写了.
主要功能是输入一串字符, 然后计算各个字符进行异或操作的结果, 结果以16进制的ASCII码显示.

说明: 这程序比较简单, 适合写过"HelloWorld!"的程序后想继续写程序的同学.

// 文件名: cksum.c
// 头文件
#include <stdio.h>
#include <unistd.h>
// 计算校验和子函数
int checksum(unsigned char *cks)
{
    unsigned char cksum[100] = {0};
    int len, i;
    int num;

    len = strlen(cks);
    strcpy(cksum, cks);
    // 校验和计算算法
    for(i = 0; i < len - 1; i++)
    {
        cksum[i+1] = cksum[i] ^ cksum[i+1];
        num = (int)cksum[i+1];
    }
    return num;
}
// 打印信息子函数
void print(int argc, char **argv)
{
    printf("Usage: %s: [-s] [-h]\n", argv[0]);
    printf("Opions:\n");
    printf("\t[-s] String to Checksum\n");
    printf("\t[-h] Print this message\n");
}
// 主函数
int main(int argc, char **argv)
{
    int opt;
    int cksum, len;
    unsigned char *cks = NULL;
    // 判断和处理命令行参数
    // 出错或者没有输入命令行参数则打印信息后退出
    if(( opt = getopt(argc, argv, "hs:")) < 0 || argc < 1)
    {
        print(argc, argv);
        exit(0);
    }
    else
    {
        switch( opt)
        {
            case 's':
                cks = optarg;
                break;
            case 'h':
            default:
                print(argc, argv);
                exit(0);
        }
    }
    // 判断输入字符串是否小于或等于1
    if( strlen(cks) <= 1)
    {
        print(argc, argv);
        exit(0);
    }

    // 进行校验和计算
    cksum = checksum(cks);
    len = strlen(cks);
    // 打印结果信息
    printf("String = %s\n", cks);
    printf("Len = %d\n", len);
    printf("Checksum = %2X\n", cksum);

    return 0;
}

在Linux用如下语句进行编译:
#gcc -c cksum.c -o cksum.o
#gcc cksum.o -o cksum

如上程序不一定是最优的, 根据需求, 可以写出更好算法的程序是我们大家都追求的.
欢迎大家多点热情讨论.~

[[i] 本帖最后由 iptton 于 2008-7-1 17:07 编辑 [/i]]

评分

1

查看全部评分

发表于 2008-7-1 17:09 | 显示全部楼层
不错。。


PS:discuz论坛中 [ i  ] 是斜体标识,可取消discuz代码或改用其它下标
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2024-5-16 22:53

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表