关于二进制数的存取问题!

flybox728 2004-03-14 11:22:35
从一个image型字段中读取二进制数(注意:image里存的是二进制的数列不是图片),要求取出相邻的两位,i放高位,i+1放低位,组成16位,转成整数再存入数组。我用流读出image字段,stream.size=40000,最后要转成20000个整数,可能描述有点问题吧,大侠应该明白我的意思吧。vc++的代码如下:
CLongBinary* pBin = variant.m_pbinary;
DWORD len = pBin->m_dwDataLength;
Mm waveMm = zeros(1,len/2);
LPSTR buffer = (LPSTR)GlobalLock(pBin->m_hData);
for(int i = 0;i<len;i+=2)
{ short y = (byte)buffer[i]+(((int)(byte)buffer[i+1])<<8);
waveMm.r(i/2+1) = y; }
菜鸟小弟在这里请教了,用delphi如何实现。
...全文
127 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjqyb 2004-03-20
  • 打赏
  • 举报
回复
安你的意思i放高位,i+1放低位,但你的Vc程序应是i+1放高位,i放低位
type WordArray=array of Word;
function ConvertIt(AField:TblobField):WordArray;
var
S:String;
i,len:integer;
begin
S:=Afield.AsString;
len:=Length(S) div 2;
SetLength(Result,len);
for i:=1 to len do
Result[i-1]:=Word(Ord(S[2*i-1])*256+Ord(S[2*i]));
end;
postren 2004-03-16
  • 打赏
  • 举报
回复
难道我的答案不对?
postren 2004-03-14
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
function TrunWord(W: Word): Word;
begin
Result:=((W and $00FF) shl 8) or ((W and $FF00) shr 8);
end;
var
I: Integer;
BinStream: TMemoryStream;
Buf: array[0..19999] of Word;
begin
BinStream := TMemoryStream.Create;
//在此把你的二进制数据读到BinStream内存流中
BinStream.Read(Buf, SizeOf(Buf)); //把流中的数据读到Buf中
for I := 0 to 19999 do
begin
Buf[I] := TrunWord(Buf[I]); //把高低字节反转
end;
//此时Buf中的数据已经是你所要的数据了
BinStream.Free;
end;

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧