reikes isbandyti realiam pasaulyje sita metoda. Iki (unsigned char *)&x buvau dasikases, bet pasipyle visokie ispejimai is kompilerio puses. Buvau ir verte lygtai realia isgaves, bet paskiau kazkaip tu baitu verte pasidare nei i tvora nei i mieta.
Su stumdymu nebbandziau, bet ten skaicius su kableliu ir nezinau ar nesukvailios programa.
Surasiau:
unsigned char *ptr=(void *) &x;
double x=0.0000001;
itoa(ptr[0],buffer,16);
print_ser(buffer);
print_ser(" ");
itoa(ptr[1],buffer,16);
print_ser(buffer);
print_ser(" ");
itoa(ptr[2],buffer,16);
print_ser(buffer);
print_ser(" ");
itoa(ptr[3],buffer,16);
print_ser(buffer);
print_ser(" ");
print_ser("\r\n");
Rezultatas: 95 bf d6 33
x=3.1415926
da f 49 40
x=10.000000
0 0 20 41
x=1.00
0 0 80 3f
x=0
0 0 0 0
x=-1
0 0 80 bf
? Ar tai teisinga?
--
Bye, Levas
--
http://www.vabolis.lt
"Laimis" <wiela@centras.lt> wrote in message news:jh9ad6$nbh$1@trimpas.omnitel.net...
> Levas rašė:
>
>> Yra kintamasis double x Jis viduje atrodo kaip 4 baitai.
>> Kaip pamatyti tuos 4 baitus (ju turini). Tipo a[0]=maziausio baito
>> verte, a[1]=. Kad atspausdinti vidine struktura to skaiciaus.
>
> unsigned char *ba = (unsigned char *) &x;
>
> (ba[0], ... ba[3])
>
> Arba
>
> union double_bytes {
> double d;
> char bytes[4];
> } u_db;
>
> u_db.d = x;
>
> (u_db.bytes[1], ... u_db.bytes[4])
>
>
> Galų gale, galima pasistumdyti pasiimant vieną baitą:
> unsigned char b1 = x >> 24
> unsigned char b2 = x >> 16
> unsigned char b3 = x >> 8
> unsigned char b4 = x
>
> p.s. reikia supaisyti endian'iškumą.