我有一个charater指针数组指向一些搅拌
每个元素都指向一些字符串 记住字符串只有1和0。
例如
我有字符指针,存储字符串,如“100110”,所以它需要6个字节来存储,但我想将其存储在位中,所以我减少了内存。
答案 0 :(得分:3)
您是否尝试过STL bitset
容器?它针对此目的进行了优化。或者,创建vector
个bool
元素将在内部打包以节省空间。
答案 1 :(得分:3)
在C风格中,这样的事情应该有效:
char* str = "100101";
unsigned out = 0;
for (int i = 0; str[i]; i++) {
out = (out << 1);
if (str[i] == '1')
out++;
}
(我暂时无法测试,所以如果我错了请纠正我)
<强>解释强>
str = "100101"
out = 0000 0000 0000 0000
i = 0:
out = 0000 0000 0000 0000 (out << 1)
out = 0000 0000 0000 0001 (out++ because str[0] == '1')
i = 1:
out = 0000 0000 0000 0010 (out << 1)
[...]
i = 5:
out = 0000 0000 0010 0100 (out << 1)
out = 0000 0000 0010 0101 (out++ because str[5] == '1')
答案 2 :(得分:0)
为什么不使用'strtol'?这是一个标准的lib函数。 或者您正在编写内存不足硬件的低级代码?
char *str = "010101";
int i = strtol(str ,(char**)NULL ,2);
==> i=21
答案 3 :(得分:-1)
一种方法是,将char* []
定义为全局,使用其索引进行访问:
char stringLiterals [] = { "0101010", "10010010", "111", "010100100", ... };
<强>用法强>: 而不是
char *p = stringLiteral[3];
使用
unsigned int idx = 3;
基本原理:如果你将这个字符串压缩成比特用于序列化目的而不是它。但除此之外我没有看到压缩它们的任何用例。在我的上述解决方案中,它不使用任何额外的内存。你已经有了一个字符串文字数组;我只是要求在全局范围内声明并使用其索引。
另外,如果字符串大小是>然后,32个字节,您将无法将其存储在一个32位int
中。