public class PDU7bitDecoderClass
{
public static string PDU7bitDecoder(string userData)
{
string result = string.Empty;
byte[] b = new byte[100];
string temp = string.Empty;
for (int i = 0; i < userData.Length; i += 2)
{
b[i / 2] = (byte)Convert.ToByte((userData[i].ToString() + userData[i + 1].ToString()), 16);
}
int j = 0; //while计数
int tmp = 1; //temp中二进制字符字符个数
while (j < userData.Length / 2 - 1)
{
string s = string.Empty;
s = Convert.ToString(b[j], 2);
while (s.Length < 8) //s补满8位 byte转化来的 有的不足8位,直接解码将导致错误
{
s = "0" + s;
}
result += (char)Convert.ToInt32(s.Substring(tmp) + temp, 2); //加入一个字符 结果集 temp 上一位组剩余
temp = s.Substring(0, tmp); //前一位组多的部分
if (tmp > 6) //多余的部分满7位,加入一个字符
{
result += (char)Convert.ToInt32(temp, 2);
temp = string.Empty;
tmp = 0;
}
tmp++;
j++;
if (j == userData.Length / 2 - 1) //最后一个字符
{
result += (char)Convert.ToInt32(Convert.ToString(b[j], 2) + temp, 2);
}
}
return result;
}
}