簡體   English   中英

如何在 linux(gcc) 中將 int 轉換為 char/string,反之亦然?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM