[英]How to convert int to char/string and vice versa in linux(gcc)?
我想知道將 integer 轉換為 char/string 的方法,反之亦然。
我已經使用了 sprintf(&charvar,"%d",&intvar) 但它產生了錯誤的 output,可能是垃圾。
我還聽說 gcc 中的 atoi() 有錯誤。參考: GCC atoi bug
將字符串/字符轉換回 int 的另一種方法是什么?
實際上,我想使用 SOCK_STREAM 將 integer 從一台機器發送到另一台機器。
//編輯:我忘了告訴 sprintf() 進行轉換並返回正值。
刪除intvar
之前的 & 符號:
sprintf(&charvar,"%d",intvar)
兩個注意事項:
&charvar
是正確的類型,但它可能不是。snprintf
而不是sprintf
的習慣是一件好事。這是一些示例代碼:
int intvar = ...;
char str[16];
snprintf(str, sizeof(str), "%d", intvar);
如果您想將 integer 發送到另一台機器,您可以將其作為二進制數據發送,只需將intvar
直接發送到 stream,您不必先將其轉換為 char。 這只會引入知道數據長度的問題,因為不同的值會生成不同長度的字符串。
請閱讀 'sprintf' 和 'sscanf' 的手冊,也許他們更安全的版本更適合你。
你不能sprintf
到一個變量。 您需要一個緩沖區,因為可能有幾個數字和尾隨零。 此外,參數應該是 int 變量,而不是它的地址。
例子:
char buffer[256];
int i = 42;
sprintf(buffer, "%d", i);
(緩沖區將填充 '4'、'2' 和尾隨 '\0')。
你的 sprintf 是錯誤的。你應該寫 sprintf(string,"%d",integer); 如果您想通過網絡發送 integer 並且這就是為什么要將其轉換為字符串的原因,請查看htons
使用這些功能,您可以將 integer 轉換為網絡格式並避免不同的字節順序問題:如果您只想將其轉換為字節,您可以執行以下操作:
char buf[4];
memcpy(buf,&integer,4);
如果您希望您的字符串具有 int 的值,那么您應該使用 sprintf。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.