2015-04-26 42 views
0

我需要执行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); 
+0

什么是你的问题? – Atuos

+0

@atuos我无法使用它,你能提供一个关于如何正确使用它的例子吗?谢谢。 –

+0

你怎么知道它不工作?你期望puts()打印'9say_hello'吗? – Atuos

回答

0

你有很多你的代码的问题。我不会给你一个工作解决方案,但会指出问题。首先,代码显然不能编译。您将未定义的变量function传递给strcpy,并将太多参数传递给strcpy。我假设你刚才错误地抄录了程序。但即使你修复了这个问题,你也会得到一些编译器警告,如果注意的话,它们会识别你的大部分问题。

  1. 您正在将buffer的地址而不是buffer本身的地址传递给encode_int
  2. 您声明buffer为char 指针的数组。看起来你真正想要的是一组char
  3. 您将一个int编码到缓冲区的开始位置。然后尝试将其打印为字符串(通过puts)。这不会起作用,将导致没有输出(如你可能已经找到)。因为int将在第一个字节中有一个0值(就像你编码的那样)。这是一个字符串的空终止符,因此是空白输出。

编辑:更正到第3点。您实际上已将buffer增加了4(如果其他每个都是固定的)。所以puts只会显示函数名称(如果其他所有内容都是固定的)。而且你已经失去了函数名称的长度。

0

把话说成这样

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

更改缓冲卖出期权行改为

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