如何轉換存儲在一個INTStore中的非數字的字符串作爲二進制整數
int b = 0110100001100101011011000110110001101111
這裏a
和b
等同像
string a = "hello";
給它的字符串是位表示。在這個環節
如何轉換存儲在一個INTStore中的非數字的字符串作爲二進制整數
int b = 0110100001100101011011000110110001101111
這裏a
和b
等同像
string a = "hello";
給它的字符串是位表示。在這個環節
不能存放很長的字符序列(例如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;
}
int output[CHAR_BIT];
char c;
int i;
for (i = 0; i < CHAR_BIT; ++i) {
output[i] = (c >> i) & 1;
}
似乎是一個愚蠢的事情,有點我認爲以下(未經測試)的代碼應該工作。
#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;
}
'int'是一個32位有符號整數。 「你好」需要40個。它不適合它。 – litelite
你不能。 hello是5個字節,但是int的大小是4個字節。 – ikleschenkov
您是否試圖存儲該二進制表示的值或實際的二進制表示?在int中存儲二進制表示可能是一個壞主意。您可能希望將其存儲爲字符串。 –