整数,在C / C ++中为两位十六进制

问题描述 投票:0回答:2

我有一个十六进制字节数组

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 ++实现?预先感谢。

c++ c hex number-formatting
2个回答
2
投票

简单

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

不适用于负整数或具有16个以上有效位的整数。但是我想你不在乎。

您的问题中有一个提示,您对新手有一个普遍的误解,即十六进制整数和十进制整数之间存在一些根本的区别。没有,所有整数都是同一类型(通常是二进制)。十进制和十六进制只是printing整数的不同方式,而不是C ++语言represents整数的不同方式。


0
投票

看来您在这里处理字节序。 union可能会帮助

#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;
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.