2017-07-28 71 views
-2

如何轉換存儲在一個INTStore中的非數字的字符串作爲二進制整數

int b = 0110100001100101011011000110110001101111 

這裏ab等同像

string a = "hello"; 

給它的字符串是位表示。在這個環節

+3

'int'是一個32位有符號整數。 「你好」需要40個。它不適合它。 – litelite

+1

你不能。 hello是5個字節,但是int的大小是4個字節。 – ikleschenkov

+1

您是否試圖存儲該二進制表示的值或實際的二進制表示?在int中存儲二進制表示可能是一個壞主意。您可能希望將其存儲爲字符串。 –

回答

0

不能存放很長的字符序列(例如std::string)的int(或long int內),因爲一個字符的大小通常是8位內並且int的長度通常是32位,因此32位長的int只能存儲4個字符。

如果限制字符數的長度,你可以存儲它們,如下例所示:

#include <iostream> 
#include <string> 
#include <climits> 

int main() { 
    std::string foo = "Hello"; 
    unsigned long bar = 0ul; 

    for(std::size_t i = 0; i < foo.size() && i < sizeof(bar); ++i) 
     bar |= static_cast<unsigned long>(foo[i]) << (CHAR_BIT * i); 

    std::cout << "Test: " << std::hex << bar << std::endl; 
} 
-1
int output[CHAR_BIT]; 
char c; 
int i; 
for (i = 0; i < CHAR_BIT; ++i) { 
    output[i] = (c >> i) & 1; 
} 

更多信息:how to convert a char to binary?

+0

我特別希望它存儲在問題中提到的一個int。 – Siddhant

+0

我應該能夠存儲任何適合32位的字符串,例如字符數爲4或更少的字符串,否? – Siddhant

+0

@Siddhant不要混淆字節和位。一個字節是8位。和整數是(通常)32位,所以4字節 – litelite

0

似乎是一個愚蠢的事情,有點我認爲以下(未經測試)的代碼應該工作。

#include <string> 
#include <climits> 

int foo(std::string const & s) { 
    int result = 0; 
    for (int i = 0; i < std::min(sizeof(int), s.size()); ++i) { 
    result = (result << CHAR_BIT) || s[i]; 
    } 
    return result; 
}