【问题标题】:How do I divide 8 byte integer to four 2 bytes Hexadecimal in C?如何在 C 中将 8 字节整数除以四个 2 字节十六进制?
【发布时间】:2021-05-14 06:00:19
【问题描述】:

我有学校任务,但 IDK 如何设计代码...

它需要做的功能是,

  1. 输入 8 字节整数(我认为它必须是 unsigned long long 类型,因为输入数字必须是 0 或更多)

  2. 将输入数字分成四个 2 字节并保存每个变量。 >

  3. 并将每个部分设为十六进制 ffff / ffff / ffff / ffff>

  4. 最后,将 ffff / ffff / ffff / ffff 转换为十进制数 65535 / 65535 / 65535 / 65535

对不起,我的英语不好,但我非常需要你的帮助.... ;( 我的水平很低,所以当你解释时,我需要一些示例代码来查看和理解。

感谢您阅读我的问题!

【问题讨论】:

  • 第 3 步和第 4 步没有意义。计算机中的所有整数都以二进制格式存储。您不能转换为十六进制或十进制。您可以做的是将值打印为十六进制或十进制,但这不是转换
  • 从 8 中提取 2 可以通过简单的布尔运算(如掩码和移位)轻松完成。您熟悉 OR、AND、XOR 等布尔运算吗?
  • @4386427:关于“计算机中的所有整数都以二进制格式存储”:这当然不是真的。一些整数使用 ASCII 数字字符存储为十进制数字。有些存储在 BCD 中。 JavaScript 以浮点格式存储所有数字,甚至整数。
  • 伙计们,我想我解释得不清楚......我需要的是显示转换后的值结果,而不是实际转换实际值。
  • ASCII、FP 和 BCD 都是二进制数据的表示/解释。有二进制数据和二进制指令代码,就是这样,真的。

标签: c parsing


【解决方案1】:

假设一个字节是八位字节vulgaris,那么一个八字节整数就是64位。那么:

  1. 包括<inttypes.h><stdint.h>
  2. 使用来自<stdint.h>uint64_t 定义一个64 位无符号整数变量x
  3. 使用scanf("%" SCNu64, &x) 从输入中读取数字。
  4. 测试scanf的返回值。如果不是 1,则读取一个数字,打印错误消息并退出程序。
  5. 数字的四个部分分别是位位置 0、16、32 和 48 的 16 位。将x 右移 0、16、32 和 48 以将每个部分移到低位位。
  6. 每次移位后,提取低 16 位。您可以使用带有 16 位掩码 0xffffu 的 AND 操作来完成此操作,也可以通过将值分配给仅存储 16 位的 uint16_t 变量来完成。
  7. 打印数字。如果您将它们放在uint16_t 变量中,则可以使用printf("%" PRIu16, variable); 打印它们。如果它们位于其他变量或表达式类型中,则需要不同的转换说明符,例如 PRIu64 如果您有 uint64_t 表达式。

【讨论】:

    猜你喜欢
    • 2015-08-08
    • 1970-01-01
    • 2013-01-18
    • 2016-12-18
    • 2018-06-06
    • 2013-09-20
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多