c++ - 在 C++ 中将短符号签名为字节

标签 c++ byte short

我正在尝试使用 C++ 将 HEX 数字转换为短数字(2 字节) 一切正常,除了一件事......从短到字节的签名转换(上次测试)

我发现了这个问题,但并不能真正从中受益:portable signed/unsigned byte cast,C++

这是我的测试:

// test 1 - positive B2Short (success)
byte *b = new byte[2];
b[0] = 0x10; //low byte
b[1] = 0x00; //heigh byte

signed short test = 0;
test = ByteToShort(b);
cout << test << endl;

// test 2 - negative B2Short (success)
b[0] = 0xF0; //low byte
b[1] = 0xFF; //heigh byte

test = 0;
test = ByteToShort(b);
cout << test << endl;

// test 3 - positive Short2B (success)
signed short n = 11;
ShortToByte(n, b);
test = ByteToShort(b);  // for display to see if it worked
cout << test << endl;

// test 4 - negative Short2B (FAIL!)
n = -11;
ShortToByte(n, b);
test = ByteToShort(b);  // for display to see if it worked
cout << test << endl;

使用的函数:

signed short ByteToShort(byte* bytes){

    signed short result = 0;
    result = (result<<8) + bytes[1]; // heigh byte
    result = (result<<8) + bytes[0]; // low byte
    return result;
}

void ShortToByte(signed short num, byte* bytes){

    bytes[1] = num & 0xFF00; // heigh byte
    bytes[0] = num & 0x00FF; // low byte
}

输出:

16
-16
11
245

最佳答案

来自 ShortToByte:

bytes[1] = num & 0xFF00; // high byte

您必须将其右移 8 位以使结果适合一个字节。否则你只会从低部分得到零。

关于c++ - 在 C++ 中将短符号签名为字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10288109/

相关文章:

java - Google Protocol 重复值的结构是怎样的?它们的局限性和优势是什么?

c++ - C++ 程序中堆栈溢出的症状是什么?

c++ - 为什么我的浮点值会失去精度并丢掉小数位?下面的示例代码

java - Rijndael AES、addRoundKey、异或十六进制字符串并将它们存储为字节

c - C中的 'short'数据类型是什么?

c++ - cplusplus中char数组和string的区别

java - java中将一串位转换为unicode字符

c - 对字节字符串进行哈希处理

java - 使用 int 的位表示进行操作

java - 将 Short 转换为 Byte 时会发生什么?