Tema: Re: Gcc AVR
Autorius: Levas
Data: 2012-02-13 01:07:14
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ą.