所以我有这个问题解决:编码/解码来自INT 14位到十六进制,并且反之亦然
写一个小程序,包括对功能,可以
将整数转换一个特殊的文本编码,然后
将编码值转换回原来的整数。
的编码功能
此功能需要在14位范围以接受一个带符号的整数[-8192 .. + 8191],并返回一个4个字符的字符串。
编码过程如下:
添加到8192的原始值,因此它的范围被转换成[0..16383]
包该值装入两个字节,使得每个最显著位被清零
未编码中间值(作为16位整数):
00HHHHHH HLLLLLLL
编码值:
0HHHHHHH 0LLLLLLL
- 格式的两个字节作为一个单一的4字符十六进制字符串并返回它。
示例值:
Unencoded (decimal) Encoded (hex)
0 4000
-8192 0000
8191 7F7F
2048 5000
-4096 2000
解码功能
你的解码功能应该接受输入的两个字节,无论是在范围[0x00..0x7F]和重新组合它们返回相应的整数[-8192 .. + 8191]
这是m y 编码函数工作,它会产生正确的结果。
public static string encode(int num)
{
string result = "";
int translated = num + 8192;
int lowSevenBits = translated & 0x007F; // 0000 0000 0111 1111
int highSevenBits = translated & 0x3F80; // 0011 1111 1000 0000
int composed = lowSevenBits + (highSevenBits << 1);
result = composed.ToString("X");
return result;
}
我需要我的解码功能的帮助,它目前没有产生正确的结果,解码功能需要每两个十六进制字符串的0x00到0x7F的,将它们合并范围,并返回解码的整数。 在我的解码函数中,我试图将我在编码函数中完成的操作反转。
public static short decode(string loByte, string hiByte)
{
byte lo = Convert.ToByte(loByte, 16);
byte hi = Convert.ToByte(hiByte, 16);
short composed = (short)(lo + (hi >> 1));
short result = (short)(composed - 8192);
return result;
}
你已经说过,你需要解码函数的帮助,但是你已经进入了很多不相关的细节,并没有真正描述它的问题。 http://stackoverflow.com/help/mcve –
@AdrianWragg谢谢,我更新了我的问题 –