Ustawianie bajtów zmiennej Int64

0

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 :| .

0
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ą [???]

0

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 :).

0

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 :]

0

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 :) .

0

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1