在C语言中将int类型转换为2字节的十六进制值

24

我需要将一个整型数转换成两个字节的十六进制值存储到char数组中,使用C语言。请问应该如何实现?


int数据类型是32位,而2字节的十六进制值是8位。如果您的int大于255,则无法适应您的十六进制值(它将溢出)。您是否意味着有符号/无符号字符而不是int? - invert
1
@wez:int类型不一定是32位。但你的问题很好,他确实需要注意溢出。 - Vicky
这个问题看起来像是一道作业题,是吗?如果是的话,请添加“作业”标签。 - Denilson Sá Maia
@Denilson:"像其他所谓的“元”标签一样,作业标签现在已经不再被鼓励使用。",但是@MikeU,请(像往常一样)遵循一般准则,说明任何特殊限制,展示你迄今为止尝试了什么,并询问具体什么让你感到困惑。 - Roger Pate
15个回答

0
这个函数非常好用。
void WORD2WBYTE(BYTE WBYTE[2], WORD Value) { 
    BYTE tmpByte[2]; 
    // Converts a value from word to word byte ----
    memcpy(tmpByte, (BYTE*) & Value, 2); 
    WBYTE[1] = tmpByte[0]; 
    WBYTE[0] = tmpByte[1]; 
} 

假设以下内容:

typedef unsigned char   BYTE; 
typedef unsigned short  WORD;

使用示例:

我们想要实现这个目标:

integer = 92
byte array in hex:
a[0] = 0x00;
a[1] = 0x5c;

unsigned char _byteHex[2];
WORD2WBYTE(_byteHex, 92);

0
大多数答案都很好,只有一件事我想补充一下:你可以使用 sizeof 来安全地保留正确数量的字节。每个字节最多可以占用两个十六进制数字(255 -> ff),因此每个字节需要两个字符。在这个例子中,我为“0x”前缀添加了两个字符,并为结尾的 NUL 添加了一个字符。
int bar; 
// ...
char foo[sizeof(bar) * 2 + 3];
sprintf(foo, "0x%x", bar);

0
unsigned int hex16 = ((unsigned int) input_int) & 0xFFFF;

input_int是您想要转换的数字。 hex16将包含input_int的最低有效2个字节。如果您希望将其打印到控制台上,请使用%x作为格式说明符,而不是%d,它将以十六进制格式打印。


0

你可以使用这个,它简单易用,方便转换。

typedef union {
    struct hex{
            unsigned  char a;
            unsigned  char b;

    }hex_da;
    short int dec_val;
}hex2dec;

hex2dec value;
value.dec_val=10;

现在十六进制值已存储在hex_da结构中,可以访问它以供进一步使用。


-1

针对动态长度的十六进制

string makeFixedLengthHex(const int i, const int length)
{
    std::ostringstream ostr;
    std::stringstream stream;
    stream << std::hex << i;
    ostr << std::setfill('0') << std::setw(length) << stream.str();
    return ostr.str();
}

但是负数需要自己处理。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接