[英]Encoding strings and ints for a RPC
我需要做一个RPC。 我正在尝试对函数名称的长度进行编码,然后再对函数名称进行编码。
Function name: say_hello
Function name length: 9
Encoded array: [9, 's', 'a', 'y', ..., 'l', 'l', 'o']
至今:
unsigned char* encode_int(unsigned char *buffer, int value) {
buffer[0] = value >> 24;
buffer[1] = value >> 16;
buffer[2] = value >> 8;
buffer[3] = value;
return buffer + 4;
}
char* function_name = "say_hello";
char* buffer[256];
buffer = encode_int(&buffer, strlen(function_name));
strcpy(buffer, function, strlen(function_name));
puts(buffer);
您的代码有很多问题。 我不仅会为您提供有效的解决方案,还将指出问题所在。 第一件事是代码显然无法编译。 你是传递一个未定义的变量function
来STRCPY并给予太多的参数strcpy
。 我假设您只是错误地转录了该程序。 但是,即使您修复了该问题,您也会收到一些编译器警告,如果您注意这些警告,则可以识别大多数问题。
buffer
的地址而不是buffer
本身传递给encode_int
。 buffer
声明为char 指针数组。 看起来您真正想要的是一个char
数组。 puts
)。 那将行不通,并且将导致无输出(您可能已经发现)。 因为int在第一个字节中将具有0值(如您已对其进行编码)。 这是字符串的空终止符,因此为空白输出。 编辑:对第3点的更正。您实际上已经将buffer
增加了4(如果其他所有内容都已固定)。 因此, puts
仅显示函数名称(同样,如果其他所有内容都已固定)。 您实际上已经失去了函数名称的长度。
像这样将单词放入缓冲区
int len;
len=Strlen(word);
memcpy(buffer,&len,sizeof(Int));
strncpy (&buffer[sizeof (int)],word,len);
更改看跌期权线
printf("%d %s\n",buffer,&buffer[sizeof (int)]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.