编码RPC的字符串和整数

时间:2015-04-26 11:40:18

标签: c function 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);

2 个答案:

答案 0 :(得分:0)

您的代码存在很多问题。我不会只给你一个有效的解决方案,但会指出问题所在。第一件事是代码显然不能编译。您正在将未定义的变量function传递给strcpy,并为strcpy提供过多的参数。我假设你刚刚错误地转录了程序。但是,即使你修复了这个问题,你也会得到一些编译器警告,如果注意这些警告会识别你的大多数问题。

  1. 您将buffer的地址而不是buffer本身的地址传递给encode_int
  2. 您将buffer声明为char 指针数组。看起来你真正想要的是一组char
  3. 将int编码到缓冲区的开头。然后尝试将其打印为字符串(通过puts)。这不会起作用,并且不会产生任何输出(正如您可能已经发现的那样)。因为int在第一个字节中将有一个0值(因为你编码了它)。这是字符串的空终止符,因此是空白输出。
  4. 编辑:更正到第3点。您实际上已将buffer增加4(如果其他每个都已修复)。所以puts只会显示函数名称(如果其他所有内容都已修复)。你已经有效地丢失了函数名称长度。

答案 1 :(得分:0)

将文字放入缓冲区,如下

int len;
len=Strlen(word);
memcpy(buffer,&len,sizeof(Int));
strncpy (&buffer[sizeof (int)],word,len);

将puts行更改为read

printf("%d %s\n",buffer,&buffer[sizeof (int)]);