【发布时间】:2011-12-27 17:10:44
【问题描述】:
来自“Hello world”的八位字节是:E8 32 9B FD 06 DD DF 72 36 19
如果应用填充,它将变为:D0 65 36 FB 0D BA BF E5 6C 32
(从维基复制)
我能知道使用 1 位填充进行编码的公式是什么吗?
这是我编辑的将字符串转换为PDU的公式:(感谢源提供者) *整个完整的公式有点长,所以我只是在这里发布一部分......
maxkeys = 160;
function binToInt(x)//sp
{
var total = 0;
var power = parseInt(x.length)-0;
for(var i=0;i<x.length;i++)
{
if(x.charAt(i) == '1')
{
total = total +Math.pow(2,power);
}
power --;
}
return total;
}
function intToHex(i) //sp
{
var sHex = "0123456789ABCDEF";
h = "";
i = parseInt(i);
for(j = 0; j <= 3; j++)
{
h += sHex.charAt((i >> (j * 8 + 4)) & 0x0F) +
sHex.charAt((i >> (j * 8)) & 0x0F);
}
return h.substring(0,2);
}
function stringToPDU(inpString,size)
{
var bitSize = size[0].value * size[0].checked | size[1].value * size[1].checked | size[2].value * size[2].checked;
var octetFirst = "";
var octetSecond = "";
var output = "";
var DATA_ENCODING = "00";
var VALID_PERIOD = "AA";
var userDataSize;
if (bitSize == 7)
{
userDataSize = intToHex(inpString.length);
for(var i=0;i<=inpString.length;i++)
{
if(i==inpString.length)
{
if (octetSecond != "") // AJA Fix overshoot
{
output = output + "" + (intToHex(binToInt(octetSecond)));
}
break;
}
var current = intToBin(getSevenBit(inpString.charAt(i)),7);
var currentOctet;
if(i!=0 && i%8!=0)
{
octetFirst = current.substring(7-(i)%8);
currentOctet = octetFirst + octetSecond;
output = output + "" + (intToHex(binToInt(currentOctet)));
octetSecond = current.substring(0,7-(i)%8);
}
else
{
octetSecond = current.substring(0,7-(i)%8);
}
}
}
//var data = DATA_ENCODING + VALID_PERIOD + userDataSize;
var PDU = output;
return PDU;
}
<input onclick="pduOut.value= stringToPDU(document.stringToPduForm.smsText.value.substring (0, maxkeys),document.stringToPduForm.size);" type="button" size="11" value=" Convert " name="stringButton">
我需要知道需要进行哪些更改,以便公式可以使用 1 位填充对消息进行编码..但我不太了解这个概念,有人可以教我吗? 谢谢。
【问题讨论】: