特急~关于#0结束符存取转换的问题 ( 积分: 100 )

Z

zyh888

Unregistered / Unconfirmed
GUEST, unregistred user!
function BytesToStr(mBytes: array of Byte): string;
var
I: Integer;
begin
Result := '';
for I := Low(mBytes) to High(mBytes) do
Result := Result + Chr(mBytes)
end;

function StrToHexStr(s : String): String;
var
Index : Integer;
begin
Result := '';
for Index :=1 to length(s) do
begin
Result := Result + IntToHex(ord(s[Index]),2);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
b : array[1..8] of byte;
s : string;
begin
b[1] := $68;
b[2] := $01;
b[3] := $00;
b[4] := $00;
b[5] := $00;
b[6] := $00;
b[7] := $00;
b[8] := $68;

s := BytesToStr(b);

// s := 'h'#1#0#0#0#0#0'h'

c := StrToHexStr(s);
//c = 6801000000000068

end;

出现#0就默认的结束,要如何将'h'#1#0#0#0#0#0'h'这整段字符写入到Oracle varchar2的字段里面去,而且在读回这个字段的时候,可以转换回6801000000000068
用什么方法,请高手指教.
 
HEXTORAW(string)
将由STRING表示的二进制数值转换为一个RAW数值。STRING应该包含十六进制值。STRING
中的每两个字符表示结果RAW中的一个字节。HEXTORAW和RAWTOHEX互为反函数。

我在PL/SQL中 update XX set content = hextoraw('6801000000000068') where id=1
实现了写入。但是提取出来仍然不对——rawtohex之后只剩下了6801,看来Oracle中字符串
不能含有#0......
建议楼主还是直接存16进制的文本吧。
 
顶部