Hallo,
Volgende code zou extendeds met een bereik van [-1;1] moeten opslaan als een byte. De uitput van de writelns is correct maar de bytes die ik in het bestand vind lijken daar helemaal niet op. Heeft iemand een idee wat ik verkeerd doe?
Code:
{$mode Delphi}
program test;
uses SysUtils,classes;
procedure saveNormals(var f: file; n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12: extended);
var
byteArray: Array of byte;
begin
setLength(byteArray,12);
byteArray[0] := (round(n1*127)+128) and 255;
byteArray[1] := (round(n2*127)+128) and 255;
byteArray[2] := (round(n3*127)+128) and 255;
byteArray[3] := (round(n4*127)+128) and 255;
byteArray[4] := (round(n5*127)+128) and 255;
byteArray[5] := (round(n6*127)+128) and 255;
byteArray[6] := (round(n7*127)+128) and 255;
byteArray[7] := (round(n8*127)+128) and 255;
byteArray[8] := (round(n9*127)+128) and 255;
byteArray[9] := (round(n10*127)+128) and 255;
byteArray[10] := (round(n11*127)+128) and 255;
byteArray[11] := (round(n12*127)+128) and 255;
writeLn(floatToStr(n1) + ' wordt ' + intToStr(byteArray[0]));
writeLn(floatToStr(n2) + ' wordt ' + intToStr(byteArray[1]));
writeLn(floatToStr(n3) + ' wordt ' + intToStr(byteArray[2]));
writeLn(floatToStr(n4) + ' wordt ' + intToStr(byteArray[3]));
writeLn(floatToStr(n5) + ' wordt ' + intToStr(byteArray[4]));
writeLn(floatToStr(n6) + ' wordt ' + intToStr(byteArray[5]));
writeLn(floatToStr(n7) + ' wordt ' + intToStr(byteArray[6]));
writeLn(floatToStr(n8) + ' wordt ' + intToStr(byteArray[7]));
writeLn(floatToStr(n9) + ' wordt ' + intToStr(byteArray[8]));
writeLn(floatToStr(n10) + ' wordt ' + intToStr(byteArray[9]));
writeLn(floatToStr(n11) + ' wordt ' + intToStr(byteArray[10]));
writeLn(floatToStr(n12) + ' wordt ' + intToStr(byteArray[11]));
blockWrite(f,byteArray,12);
end;
var
f: file;
begin
AssignFile(f,'test.bin');
ReWrite(f,1);
saveNormals(f,0.682318270206451,0.73105525970459,0,0,1,0,0,1,0,0.682318270206451,0.73105525970459,0);
end.
Ik gebruik FreePascal 2.0 op x86 Linux.
Bookmarks