首页 > 解决方案 > 如何在 C 中将 8 字节整数除以四个 2 字节十六进制?

问题描述

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

它需要做的功能是,

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

  2. 将输入数字分成四个 2 字节并保存每个变量。<<例如,输入数字为 18446744073709551615,则二进制为 1111111111111111111111111111111111111111111111111111111111111111。(它不必转换为二进制,只是告诉你如何划分)像这样划分 1111111111111111 / 1111111111111111 / 1111111111111111 / 1111111111111111 分为四部分>>

  3. 并将每个部分设为十六进制 <像这样,1111111111111111 / 1111111111111111 / 1111111111111111 / 1111111111111111 -> ffff / ffff / ffff / ffff>

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

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

感谢您阅读我的问题!

标签: cparsing

解决方案


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

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

推荐阅读