我需要一个可以根据用户输入计算校验和的小程序。
不幸的是,我所知道的关于校验和的是它与包中的所有数据相关。
我试图在网上搜索一个没有运气的例子。
我知道我是否有一个字符串:41,4D,02,41,21,04,02,02,00,00,00,00,00,00,00,00,00,00,00,00 ,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
这应该导致6A的校验和。
希望有人可以帮助我。如果有人在Python 3中编写了一个示例,也可以为我工作
答案 0 :(得分:3)
你走了:
unsigned char *packet;
unsigned char xor = 0;
for ( int i = 0 ; i < packet_len ; i ++ ) {
xor = xor ^ packet[i];
}
// xor has the required checksum
答案 1 :(得分:3)
如果我理解“xor包中的所有数据”,那么你应该这样做:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
unsigned int data;
vector< unsigned int > alldata;
cout << "Enter a byte (in hex format, ie: 3A ) anything else print the checksum of previous input: ";
while ( true )
{
cin >> hex >> data;
if ( cin.fail() || cin.bad() )
break;
alldata.push_back( data );
cout << "Enter a byte: ";
}
unsigned int crc = 0;
for ( int i = 0; i < alldata.size(); i++ )
crc ^= alldata[ i ];
cout << endl << "The checksum is: " << hex << uppercase << crc << endl;
system( "pause" );
return 0;
}
我们的想法是建立一个初始化为0的变量,然后用它来xo包的所有元素,同时将操作结果存储在每一步的同一个变量中。
编辑:编辑了答案以提供完整的工作示例(远非完美,但有效)。用法:根据需要输入字节,一旦输入完成,输入任何无效的内容,例如'q'(不能是十六进制数)。你将打印出校验和。