思い出も作品も3Dデータで残せる!

16バイトの文字列を8バイトのint64型に変換したいです
下記コードのようにやってみたのですが上手く動きません
何か間違っている、他に方法などがありましたら教えてください。

function HexToInt64(const S: string): Int64;
const
hexstr : string = '0123456789abcdefABCDEF';
var
I,L,h,m: Integer;
j: Int64;
p: PByteArray;
test: string;
begin
result:=-1;
p := @j;
L:=Length(s);
test:= '';

if L <> 16 then Exit;
for i:=1 to L do
if Pos(s[i], hexstr)<=0 then Exit;

h:= strtoint('$' + Copy(S,0,8));
CopyMemory(@p[0], @h, 8);
m:= strtoint('$' + Copy(S,9,8));
CopyMemory(@p[8], @m, 8);
CopyMemory(@j, @p, 16);
result:=j;
end;

gooドクター

A 回答 (1件)

「上手く動きません」とはどういうことでしょうか? 「具体的に」


・どのような入力を与えて
・どのような結果を期待したところ
・どのような結果が得られた (あるいはどうなった)
のか, きちんと書いてください.
まずは, こんな変な書き方をやめて「普通の書き方」をすること. この処理で, なんで CopyMemory を使う必要があるんだろう. Int64 って, 演算できないの?
CopyMemory を使うにしても, たぶん引数がおかしい.
エンディアンは無関係だろうけど, 複数のバイトからなるデータを「バイトの配列」として扱う際には常に気をつけるべきことだな.
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

gooドクター

人気Q&Aランキング