首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

请问怎么将一个整数压缩成指定字节的字符串,并将此字符串还原为此整数

2012-02-12 
请教如何将一个整数压缩成指定字节的字符串,并将此字符串还原为此整数?我目前有两个函数是实现此功能的,但

请教如何将一个整数压缩成指定字节的字符串,并将此字符串还原为此整数?
我目前有两个函数是实现此功能的,但只能处理正整数,负整数会出错,能否帮我增加处理负整数功能呢?谢谢!!!
//将整数转换为协议整数   -   按网络字节顺序的多个字节
Function   ConvertInteger   (Source,Len   :   Integer)   :   String;
Var
        i                               :   Integer;
Begin
        Result   :=   ' ';
        For   i   :=   1   To   Len   Do
        Begin
                Result   :=   Chr   (Source   And   $FF)   +Result;
                Source   :=   Source   Shr   8;
        End;
End;
//将协议整数(网络字节顺序的多个字节)还原为整数
Function   RevertInteger   (Source   :   String)   :   Integer;
Var
        i                               :   Integer;
Begin
        Source   :=   Copy   (Source,1,4)   ;
        Result   :=   0;i   :=   1;
        While   i <=Length   (Source)   Do
        Begin
                Result   :=   Result   Shl   8+Ord   (Source[i])   ;
                Inc   (i)   ;
        End;
End;

[解决办法]
ding
[解决办法]
-2和254用二进制表示都一样,所以在前面都加以个标志位,
一个字节,存数的范围是 -128 --128 和 0 -- 255
一个字, 存数的范围是 -32767 --32767 和 0 -- 65535
一次类推,你自己控制就行

[解决办法]
function ConvertInteger(Source, Len: Integer): String;
var
i: Integer;
begin
Result := ' ';
if Len > SizeOf(Source) then
Exit;
for i := 1 to Len do
begin
Result := Chr(Source and $FF) + Result;
Source := Source shr 8;
end;
end;
//将协议整数(网络字节顺序的多个字节)还原为整数
function RevertInteger(Source: String): Integer;
var
i, Len: Integer;
n: Int64;
begin
Source := Copy(Source, 1, SizeOf(Result));
Result := 0;
n := 0;
i := 1;
Len := Length(Source);
while i <= Length(Source) do
begin
n := n shl 8 + Ord(Source[i]);
Inc(i);
end;
if n > Power($100, Len) / 2 - 1 then
n := n - Floor(Power($100, Len));
Result := n;
end;

//LZ要这个干嘛???这样转换很容易出界的

热点排行