[英]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.