繁体   English   中英

编码RPC的字符串和整数

[英]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 我假设您只是错误地转录了该程序。 但是,即使您修复了该问题,您也会收到一些编译器警告,如果您注意这些警告,则可以识别大多数问题。

  1. 您正在将buffer的地址而不是buffer本身传递给encode_int
  2. 您将buffer声明为char 指针数组。 看起来您真正想要的是一个char数组。
  3. 您将int编码到缓冲区的开头。 然后尝试将其打印为字符串(通过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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM