【问题标题】:Store a non numeric string as binary integer [duplicate]将非数字字符串存储为二进制整数[重复]
【发布时间】:2018-01-04 14:55:44
【问题描述】:

如何转换像

这样的字符串
string a = "hello"; 

存储在 int 中的位表示

int b = 0110100001100101011011000110110001101111

这里ab 是等价的。

【问题讨论】:

  • int 是一个 32 位有符号整数。 “你好”需要 40。它不适合它。
  • 你不能。 hello 是 5 个字节,但 int 大小是 4 个字节。
  • 您是要存储该二进制表示的值还是实际的二进制表示?在int 中存储二进制表示可能是个坏主意。您可能希望将其存储为字符串。
  • @FrançoisAndrieux 对于提出这样的问题的人来说,它可能是。
  • 嗯,int 对于4 字符以外的任何内容都不太可能

标签: c++ string binary


【解决方案1】:

您不能在int(或long int)内存储长字符序列(例如std::string),因为字符的大小通常为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;
}

【讨论】:

    【解决方案2】:

    这似乎是一件愚蠢的事情,我认为以下(未经测试的)代码应该可以工作。

    #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;
    }
    

    【讨论】:

      【解决方案3】:
      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?

      【讨论】:

      • 我特别希望它存储在问题中提到的 int 中。
      • 我应该能够存储任何适合 32 位的字符串,即字符数为 4 或更少的字符串,不是吗?
      • @Siddhant 不要混淆字节和位。一个字节是8位。整数(通常)是 32 位,所以 4 个字节
      • @litelite 正确
      猜你喜欢
      • 2012-08-16
      • 2012-01-03
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 2012-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多