2015-05-13 51 views
-4

我有一個字符串的二進制消息。該字符串包含諸如「10001000」之類的值,並將其用作存儲不同數據類型的二進制表示的緩衝區。我將解析數據,然後轉換每個序列。我的努力是將1和0的特定字符串轉換爲:integer,float或double。 int的一個可能的解決方案是strtol,但它不能解決我所有的問題...將包含二進制表示的字符串轉換爲數字 - C

我讀過拋出很多人試圖創建一個包含數字的二進制表示形式的字符串的討論。但我的問題恰恰相反:一旦我有一個二進制表示字符串,回滾數字。

任何想法或建議將是最受歡迎的。

+1

所以,你告訴你沒有通過搜索得到答案(好的,好的,提示,至少)? –

+1

我*誠實*不能相信谷歌搜索相關的事情**從來沒有**導致你['strtol()'](http://pubs.opengroup.org/onlinepubs/7908799/xsh/strtol.html) ... –

+2

在搜索框中鍵入「在二進制中將二進制轉換爲十進制」。收到了同樣的問題噸已提出的問題 –

回答

0

這是很簡單的...

unsigned int number; 
char str[33]; 
int i; 
int s; 

/* Read some 32-bit binary number in character representation in str. */ 
Do some stuff. 

/* Convert from string to binary. */ 
number = 0; 
s = strlen(str); 
for (i = 0; i < s; i++) 
    { 
    if (str[i] == 0x00) break; 
    if (str[i] == '0') 
     { 
     number |= 1; 
     number << 1; 
     } 
    if (str[i] == '1') 
     { 
     number &= 0xFFFFFFFE; 
     number << 1; 
     } 
    } 

一般情況下,你可以找到這在谷歌或在你的教科書。所以你這次免費得到了這個。

編輯:

我注意到你也提到了float或double。這些是由IEEE-754標準定義的複雜數據類型。如果二進制字符串已經處於浮點表示形式,那麼你可以使用一個聯合來從一個unsigned int中獲得一個浮點類型。代碼如下:

union float_conversion_t 
    { 
    unsigned int i[2]; 
    float f; 
    double d; 
    }; 

在這裏你填寫一個或兩個整數,然後讀取float或double值。您可能需要根據機器的字大小(32位,64位或其他)調整陣列的大小。

0

感謝Daniel和所有其他有效的意見。

主要問題是如果float/double轉換對於任何先前存在的函數是可能的。畢竟,我的理解(糾正我,如果我錯了)是否定的。

所以我們必須通過數學和浮點轉換(大量的IEEE 754在線文檔...)並使用strtol來整數。很公平。

這可能是幫助他人:

  • Here's作爲字符串二進制IEEE 754的轉換爲雙
  • 但如果你看看轉換類似「1001.1101」(二進制點表示)浮動,this guy做得很好
相關問題