2017-02-25 163 views
0

我有一個字符串:如何使用C++將一串二進制數轉換爲其帶符號的十進制表示?

1010 

字符串的無符號表示出來的是10後做:

string immediateValue = "1010"; 
char immediateChars[5]; 
strcpy(immediateChars, immediateValue.c_str()); 

char * ptr; 
long parsedInteger = strtol(immediateChars, &ptr, 2); 

據我瞭解strtol將可以用來只得到無符號表示。有沒有辦法讓2的補碼值爲-6?

+1

'long tc = parsedInteger | (long(-1)<< immediateValue.length());' –

+0

@ChristopherOicles'long(-1)'應該寫成'-1L' –

+0

@LưuVĩnhPhúc我想明確表示它是相同的類型作爲目標 - 如果我只是使用了一個後綴,那麼OP很容易忽略這個後綴(當然,他會遇到'long long'的問題 - 使用g ++的函數cast會失敗)。 –

回答

3

檢查您的第一個字符,如果它是0,則通常使用n = strtol,如果它是1,則翻轉位,例如, 「1010」改爲「0101」,然後取strtol翻轉的字符串,該值的負值減1就是你的答案。

0

這些數字是二進制字符串,您必須將它們轉換爲denary。

滋擾。這些字符串可能太長而不能簡單地打包成很長的文本,這會讓生活變得更加容易(將long位拖長,然後調用sprintf())。你必須編寫你自己的二進制除法程序,除以二進制十(「1010」)並取其餘部分。這是你的最後一個數字。然後重複,直到數字變爲零。作爲最後一步,反轉數字以匹配左邊約定的最高有效數字。

這是相當多的代碼,但作爲學習練習是合理的。

+0

好的,謝謝。這是一個更大的項目的一部分,我試圖看看是否有某種C/C++技巧來幫助我。但我想你無法避免不可避免的。 – dikshant

相關問題