簡體   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