掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
バイト配列の途中に代入するには (ID:9139)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> ひとスジ : 「動的配列って ホントはポインタだってこと知っとった?」 そうですね。string 型に似てますよね。 > result := TByteArray(@C[1]); // Cの一部分をBにする なるほど、これは値を代入するのではなく、参照を代入する感じですね。 だとすると、長い配列の一部を受け取る短い配列の SetLength(B, 6); はいりませんね。実体は必要ないですから。参照が代入されている様子を 見てみましょう。 procedure TForm1.Button1Click(Sender: TObject); var B,C:TByteArray; begin SetLength(C,3); C[0] := $FF; C[1] := $AA; C[2] := $FF; B := TByteArray(@C[1]); Memo1.Lines.Add(IntToHex(B[0],2)); C[1] := $BB; Memo1.Lines.Add(IntToHex(B[0],2)); end; こんなふうにすると、Memo1 には AA BB と表示されて、B[0] が C[1] と同じ場所を参照しているのが分かりますね。 わたしの回答は「代入」を値のコピーとして解釈したものです。 それから、今日の日付は26日ですけど、 > Val('$'+ Copy(UsStr, 5,2), C[3], UsInt); にすると16進の26、つまり10進の38が C[3] に代入されますね。 表示のとき、16進数にしているので見かけは同じですが、十進数として 格納し、表示も10進数表示にするのが理にかなっているように思います。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.