簡體   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