难题啊,我已经没有办法了,求求各位了!(100分)

  • 主题发起人 flybox728
  • 开始时间
F

flybox728

Unregistered / Unconfirmed
GUEST, unregistred user!
在sql server中定义了一个image型的字段,现在我想用delphi取出某条字段的值,再在该值中每次取出十六进制的四位转成十进制并存在一个数组中,如何实现?
例:‘0xFFFFC12B00000000E801000001000100……’
每四位取一次值 : FFFF -> 转成十进制存入数组
C12B ->
0000 ->
……
……
谢了,在线等,解决后马上送上100分!!!
 
var
str,dstr:string;
Data:array of integer
//存储数字。
slen:integer;
i:integer;
begin
str:='0xFFFFC12B00000000E801000001000100';//可以用FieldByName('').AsString获得
str:=copy(str,3,length(str)-2);//去掉0x
slen:=length(str);
Setlength(data,1);
i:=0;
while slen>0 do
begin
dStr:=copy(str,1,4);
Data:=StrToInt('$'+Dstr);
str:=copy(str,5,slen-4);
slen:=length(str);
inc(i)

setlength(data,length(data)+1);
end;
end;
 
我手头没有delphi,不好试,不过楼上的显然不是好方法。
没有必要将image数据转换为string。直接将image数据取到缓冲区中,然后用一个pdword的
指针指向缓冲区,然后利用pdword读取就可以了。
 
同意远帆!
 
我有一个疑问,我用 select wave from table1 看到这个表的image字段的值是'0XFFAC097CDD……',按照文本的取法取不出值 query1.fieldbyname('wave').asstring的值为'????????????????????????????????????????',但是我如果用语句直接给这个字段赋值后 (insert table values('FFFAC07798')),再用select 语句查询,该记录的值为
‘0x46464641433037373938’,没有一个字母,但是我再用上述方法取值时就正常了,取出为‘FFFAC07798‘,大家一进研究一下吧
 
gz
没有灌水
 
天!你以image方式存进的是真正的16进制数据,你用管理器看到的字符是管理器帮你做了转化。如果ado(或bde)在asstring取值的时候没有帮你做转化工作,那么它们就还是16进制数据,而不是你希望的那个字符串。由于它们不是可显示(打印)的字符,所以显示为???号。
但如果你添加的时候是以字符串添加进去的,那么它们自然还是字符串。
 
比如你添加进去的是字符串:
'FA',那么转换为16进制就是0x4641,但是如果是一个16进制的0xFA,那么它就不能转换为
可打印的字符。
 
我明白了,这个表是按二进制的格式存的,我搞错了,谢谢了,送分给你-远帆,交个朋友,留个联系方式好吧,我是flybox728@163.com
 
同意,就是楼上说的这样
 
接受答案了.
 
我的是yuan-fan@21cn.com。
不过我正在转C++.net,单位的机子连delphi都没有装。
 

Similar threads

S
回复
0
查看
952
SUNSTONE的Delphi笔记
S
S
回复
0
查看
775
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
897
DelphiTeacher的专栏
D
顶部