繁体   English   中英

如何在 C 中将 8 字节 integer 划分为四个 2 字节十六进制?

[英]How do I divide 8 byte integer to four 2 bytes Hexadecimal in C?

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

它需要做的function是,

  1. 输入 8 字节 integer (我认为它必须是 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

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

感谢您阅读我的问题!

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

  1. 包括<inttypes.h><stdint.h>
  2. 使用<stdint.h>中的uint64_t定义一个 64 位无符号 integer 变量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表达式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM