[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