簡體   English   中英

C/C++ 中的整數到兩位十六進制數

[英]Integer to two digit Hexadecimal in C/C++

我有一個十六進制字節數組

byte hex= {0xAA, 0x55, 0x00, 0x00}

我也有一個整數值可以說

int val= 10;

現在我想將整數值轉換為 4 位十六進制值,如 0x000A 並將其分別存儲在第一個和最后兩個數字的 hex[3] 和 hex[2] 中。

例如:

int val=10;
//in hex val=0x000A
msb= 0x00;
lsb= 0x0A;
hex[3]= msb;
hex[2]= lsb;
//so my final hex array will be 
hex[]={0xAA, 0x55, 0x0A, 0x00}

//here is another example:
int val=300;
//in hex val=0x012C
msb= 0x01;
lsb= 0x2C;
hex[3]= msb;
hex[2]= lsb;
//so my final hex array will be 
hex[]={0xAA, 0x55, 0x2C, 0x01}

如何在 C 或 C++ 中實現? 提前致謝。

簡單的

int val = 10;
int msb = val/256;
int lsb = val%256;
hex[3] = msb;
hex[2] = lsb;

不適用於負整數或超過 16 位有效位的整數。 但我想你不在乎這些。

您的問題中有一個提示,您有一個常見的新手誤解,即十六進制整數和十進制整數之間存在一些根本區別。 沒有,所有整數都屬於同一類型(通常是二進制)。 十進制和十六進制只是打印整數的不同方式,而不是 C++ 語言表示整數的不同方式。

看起來你在這里處理字節序。 工會可能會有所幫助

#include <iostream>

union U {
  uint32_t val;
  uint8_t hex[4];
};

int main() {
  U u{0x12345678};
  std::cout << std::hex << u.val << std::endl;
  for (const auto h : u.hex) {
    std::cout << std::hex << static_cast<uint32_t>(h) << std::endl;
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM