ok thx. saya juga dah pake mirip mas Agus, yang ini diambil dari internet. utk operasi tipe data 2 dan 4 byte, spt short, unsigned, long dan unsinged long tidak masalah masalah timbul waktu saya mau pakai fungsi tsb utk tipe data integer 8 byte deklarasinya sbb: typedef long long dlong; //dlong ==> 8 byte integer
baca di internet http://crasseux.com/books/ctutorial/Integer-variables.html ternyata itu integer 64bits. - long long: A long long integer (64 bits long on most GNU systems). Also called long long int. pertanyaan saya 1, bagaimana mendeklarasikan sebuah Integer 64 bits 2. bagaimana menuliskan isi variable tsb ke standart output apakah ada I64? utk statement sbb: printf("%I64d", variable); -eko- ----- Original Message ----- From: "Agus Budy Wuysang" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Tuesday, June 22, 2004 1:15 PM Subject: Re: [linux-programming] little endian => big endian > [EMAIL PROTECTED] wrote: > > halo semua. perkenalkan saya member baru. > > langsung tanya, berhubungan dengan GCC :) > > > > saya punya data Biner bertipe struct /record. > > merupakan hasil output dari program di mesin Sparc Solaris 8. > > saya mau proses data tsb di mesin Intel Solaris 8 > > > > masalah muncul, gmn caranya saya bisa proses data biner tadi (little endian) > > di mesin yang menganut sistem Big endian. > > > > 1. ada ga parameter GCC yg otomatis ubah, kalo pembacaan data adalah Little > > endian > > tapi di proses untuk mesian Big endian > > No, anda harus detect sendiri: > > int isLittleEndian (1 & 0xff) > { /* return 0 if big endian */ > unsigned short i=1; > return (int) (i & 0xff); > } > > > 2. di struct, ada tipe data long long (typedef long long dlong) > > saya dah cobain utk konvert, ke big endian tapi ada beberapa field > > value nya tidak sama di mesin Sparc dan di mesin Intel > > juga untuk tipe data long dan short. gmn caranya agar valuenya sama. > > Kan tinggal main pakai shift: > > unsigned long swab(unsigned long L) > { > unsigned char c[sizeof(long)]; > unsigned m; > int i, rs; > > > for (i=0, m=0xff, rs=0; i < sizeof(long); ++i, > m <<= 8, rs +=8) > c[i] = (L & m) >> rs; > return c[0] << 24 | c[1] << 16 | c[2] << 8 | c[3]; > } > > int main(void) > { > unsigned long v = 0x01020304; > if (isLittleEndian()) > puts("little"); > else > puts("big"); > printf("v = 0x%08lx\n", v); > printf("after swab = 0x%08lx\n", swab(v)); > printf("double swab = 0x%08lx\n", swab(swab(v))); > return 0; > } > > Bisa juga pakai yang glibc inet functions: > > man 3 htonl htons ntohl ntohs > > Sekalian numpang nanya OOT :) Proxl sudah support GPRS belum > untuk daerah Sulawesi? > > -- > +-R-| Mozilla 1.6 Gecko20040116 |-H-| Powered by Linux 2.4.x |-9-+ > |/v\ Agus Budy Wuysang MIS Department | > | | Phone: +62-21-344-1316 ext 317 Mobile: +62-816-1972-051 | > +------------| http://www.fasw.co.id/person/supes/ |-------------+ > > -- > Berhenti langganan: [EMAIL PROTECTED] > Arsip dan info: http://linux.or.id/milis.php > -- Berhenti langganan: [EMAIL PROTECTED] Arsip dan info: http://linux.or.id/milis.php
