c++ - 如何查看空头的位表示?

标签 c++ bit short

如果我将它作为指向内存的指针作为指向短裤的指针:

unsigned short* ms = reinterpret_cast<unsigned short*>(_memory);

而且我知道 ms 的大小(这条短裤的数量),我希望看到所有这些短裤及其二进制表示形式。

如何在 C++ 中访问每个 short 的位?

最佳答案

要查看类型为T任何 变量的二进制表示,您可以这样做:

template <typename T>
void print_raw(const T & x)
{
  const unsigned char * const p = reinterpret_cast<const unsigned char *>(&x);
  for (std::size_t i = 0; i != sizeof(T); ++i)
  {
    if (i != 0) std::putchar(' ');
    std::printf("%02X", p[i]);
  }
}

您可以将其插入您的短裤列表。

(您甚至可以通过两次查找索引 p[i]/16p[i] % 16 来替换 printf > 使用合适的字母表:

static const char alphabet = "01234567890ABCDEF";
std::putchar(alphabet[p[i] / 16]);
std::putchar(alphabet[p[i] % 16]);

或者用真正的二进制打印机替换它:

void print_byte(unsigned char b)
{
  for (std::size_t i = CHAR_BIT; i != 0; --i)
  {
    std::putchar(b & (1u << (i-1)) ? '1' : '0');
  }
}

您可以将其链接到前一个循环而不是两个 printf 调用。)

关于c++ - 如何查看空头的位表示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8142884/

相关文章:

c - 打印 void 指针的字节

ruby - 在 ruby​​ 中通过 ioctl 获取 essid

java - 当我想写出无符号短值时获取有符号短值

c++ - 使用 clang-tidy 检查 c++17 代码

c++ - 使用 Cygwin 的 C++ 中的 undefined reference 错误,为什么我的文件没有链接?

c++ - 我在这个 lint 错误抑制尝试中做错了什么?还有更好的方法吗?

c++ - Windows 7/64 中的串行异步 I/O

c - 为什么我们将 (temp>>11) 乘以 2 来找到此代码中的第二个

c - Short 不起作用,但 int 可以吗?