Mam problem z przesyłaniem zmiennej Int64 (zresztą dotyczy to chyba każdej zmiennej wiekszej niż Byte) przez sockety (nie używam komponentów). Problem nie dotyczy samego przesyłania, tylko "rozkładu" danej zmiennej przed wysłaniem na elementy tablicy (Int64 zajmuje 8 bajtów) i poźniejszego jej poskładania :). Mam wrażenie że widziałem kiedyś podobny problem na forum ale nie za bardzo wiem jak sie zabrać do szukania :| .
hmmm...
A nie można przkonwertować zmiennej na string
var tab : array[0..7] of string; // osiem elementów typu string
tmp:string; // string tymczasowy
big_int: int64; // nasza zmienna typu int64
i, j : byte; // liczniki pętli
begin
tmp:= IntToStr(big_int);
for i:= 0 to 7 do
for j:= 0 to 255 do
tab[i][j+1]:= tmp[i*255+j];
// ... tutaj wysyłanie 8 komunikatów numerem indeksy tablicy w nagłówku do oznaczenia co jest wysyłane (to powienieneś wiedzieć jak zrobić) :)
end;
/// jak na mój gust to powinno działać [hurra]
/// dopisane
czy wie ktoś dlaczego pojawiły się odstępy w miejscu deklarowania zmiennych, bo w kodzie jest linijka pod linijką [???]
No nie jest to dokładnie to czego chciałem :/ . Gdybym chciał użyć stringa to po prostu wysłałbym ta liczbę zapełniąjąc kolejne komórki tablicy kolejnymi znakami stringa otrzymanego z IntToStr (nie wiem, być moze to samo robi twój kod :) ). Ale mi chodzi o jakiś bardziej "profesjonalny" sposób :).
Nie wiem, czy dobrze zrozumiałem Twoje pytanie, ale... :
type T8Byte=array[0..7]of byte;
var a:T8Byte;
b:int64;
begin
//....
a:=T8Byte(b); //b jest przypisane do tablicy bajtow
//.... i zawsze mozemy odwrotnie:
b:=int64(a);
I w tym wypadku indeks bajtu w tablicy odpowiada jego znaczeniu w zmiennej.
Możnaby też zrobić wskaźnikiem.
*dop. Milka, te odstępy robią sie po komentarzach (przynajmniej typu *), a dlaczego to nie wiem :]
Dzięki wielkie ! Ja tu myślałem nad jakimiś kombinacjami, a tu wystarczy zwykłe rzutowanie :) . [prosze]
[dopisane]
No tak, jednak okazało sie że ten problem należey do owych 80% z mojego podpisu :-P . Ale tym razem bardziej pasuje mi rozwiązanie bez użycia SysUtils :) .
A po co to pisać samemu jak już jest?
Cytat z helpu:
Int64Rec separates parts of an 8-byte value.
Unit
SysUtils
Delphi syntax:
type
Int64Rec = packed record
case Integer of
0: (Lo, Hi: Cardinal);
1: (Cardinals: array [0..1] of Cardinal);
2: (Words: array [0..3] of Word);
3: (Bytes: array [0..7] of Byte);
end;
i można wygodnie dzielić na paczki 1, 2 i 4-bajtowe