在c+中创建校验和+;来自char 我试图理解这个C++代码: void __fastcall TForm1::Button2Click(TObject *Sender) { char temp[50]; sprintf(temp,"%S",Edit1->Text); Send(temp); } void TForm1::Send(char *TX_String) { unsigned char checksum = 0x02; while(*TX_String) { checksum ^= *TX_String++; } checksum ^= 0x03; }
我的复制品是这样的:在c+中创建校验和+;来自char 我试图理解这个C++代码: void __fastcall TForm1::Button2Click(TObject *Sender) { char temp[50]; sprintf(temp,"%S",Edit1->Text); Send(temp); } void TForm1::Send(char *TX_String) { unsigned char checksum = 0x02; while(*TX_String) { checksum ^= *TX_String++; } checksum ^= 0x03; },c++,checksum,C++,Checksum,我的复制品是这样的: #include <iostream> using namespace std; void prepareAndSend() { char Command[50]; sprintf(Command,"%s", "65535V"); unsigned char checksum = 0x02; char* p = Command; while(*p) { checksum ^= *p++; }
#include <iostream>
using namespace std;
void prepareAndSend() {
char Command[50];
sprintf(Command,"%s", "65535V");
unsigned char checksum = 0x02;
char* p = Command;
while(*p) {
checksum ^= *p++;
}
checksum ^= 0x03;
std:cout << checksum << std::endl;
}
int main() {
prepareAndSend();
return 0;
}
此代码为从输入字段传递的文本创建校验和。我不熟悉C++。你知道为什么它不能用小提琴吗?因为
char*命令[50]
与char*TX\u String不同char*TX_String
是指向字符序列的指针,而char*Command[50]
是此类指针的数组
试试这个:
void prepareAndSend() {
char Command[50];
sprintf(Command,"%s", "65535V");
unsigned char checksum = 0x02;
char* p = Command;
while(*p) {
checksum ^= *p++;
}
checksum ^= 0x03;
std:cout << checksum << std::endl;
}
void prepareAndSend(){
char命令[50];
sprintf(命令,“%s”,“65535V”);
无符号字符校验和=0x02;
char*p=命令;
而(*p){
校验和^=*p++;
}
校验和^=0x03;
std:cout在原始代码中,字符串是char*
,在代码中,命令是char**
相反,创建一个类似的校验和函数,它接受char*
,这将使调试更容易
(并将char*Command[50]
替换为char Command[50]
)在出现此错误的代码中,您有:
char *Command[50];
错误是:
error: lvalue required as increment operand checksum ^= *Command++;
基本上意味着你试图增加一些不是变量的东西
这里的要点是当你有一个像chara[10]这样的数组时
,当您编译程序时,它将为您分配10个char
s,并且每当您使用它时,汇编代码中的名称a
将替换为数组开头的地址。因此a
本身不是一个变量,尽管不能增加
但是如果你定义了一个char*b=a
,那么你就是在分配一个变量,这个变量里面有一个指针,当然可以被操作。然后b++
有一个含义,就是增加地址。请编辑这个问题,把给你这个错误的代码包括进去。我如何打印校验和?
error: lvalue required as increment operand checksum ^= *Command++;