【问题标题】:How to split an unsigned long in c++如何在c ++中拆分无符号长
【发布时间】:2021-08-16 15:58:13
【问题描述】:

我将一个十六进制数传递给一个 unsigned long 类型的函数,假设该数字是 0x5ED3710573047010。当我显示这个数字时,它以十进制而不是十六进制显示。我想知道的是,当将值分配给该变量时,它是在分配给变量时从十六进制转换为十进制还是只是 cout 导致它以十进制格式显示? 另外,如果我想将此十六进制数分成两部分,最好的方法是什么?我是否应该将其转换为字符串并拆分字符串,然后将两个字符串转换回 Int 并将其存储在两个单独的变量中?还是有一些简单快捷的方法?

【问题讨论】:

  • 通过cout转换成十进制。您可以使用std::hex 以十六进制打印。
  • 这能回答你的问题吗? C++ cout hex values?
  • 小心,long 可能是 32 位宽,即使在 64 位系统上(例如使用 MSVC 编译器时)。如果您想要保证 64 位类型(至少)使用long long。或fixed width type,如uint_least64_t
  • @churill 有点是的,但请你看看我的问题的第二部分,它涉及将十六进制数分成两部分?
  • @AzeemLodhi 每个问题帖子问一个问题。

标签: c++ string xcode hex


【解决方案1】:

当我显示这个数字时,它以十进制而不是十六进制显示。我想知道的是,当值被分配给这个变量时,它是在分配给变量时从十六进制转换为十进制还是只是 cout 导致它以十进制格式显示?

C++ 中的所有数字都以基数(也称为基数)2 表示,即二进制。它永远不是基数 10(十进制)也不是基数 16(十六进制)。

当您输入一个整数时,您编写的文本会被解析,并且取决于您用于输入的函数,通常整数的前缀决定了文本的解释方式。前缀 0x 表示十六进制,0 表示八进制,否则将文本解释为十进制。该过程的结果是存储在内存中的非文本二进制表示。除了值之外,该值不包含有关文本表示的信息,例如基数。

当编译器解释包含整数文字的源代码(文本)时,上述相同的解析也适用。

当您将整数输出为文本时,默认行为是以十进制显示文本表示。这通常可以控制,具体取决于您用于输出的函数。

【讨论】:

  • @eeroika 你能看看我的问题的拆分部分吗
  • @AzeemLodhi 请参阅我在问题下方写的评论。
  • 其实主要问题是关于拆分第一部分只是为了我的理解。这就是为什么我用标题来询问 unsigned long 的拆分
  • @AzeemLodhi 好吧,我回答了第一个问题。
猜你喜欢
  • 2021-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多