From: Chris Holmes Newsgroups: comp.os.msdos.djgpp Subject: Re: From Bytes to Int and Char Date: Fri, 13 Aug 1999 23:17:37 -0400 Organization: Georgia Institute of Technology, Atlanta GA, USA Lines: 34 Message-ID: <37B4DFD1.4D66@surfsouth.com> References: <37B466D7 DOT 958F09E5 AT americasm01 DOT nt DOT com> NNTP-Posting-Host: r33h43.res.gatech.edu Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Trace: news-int.gatech.edu 934601297 16174 128.61.33.43 (14 Aug 1999 03:28:17 GMT) X-Complaints-To: usenet AT news DOT gatech DOT edu NNTP-Posting-Date: 14 Aug 1999 03:28:17 GMT X-Mailer: Mozilla 3.04Gold (Win95; I) To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com Campbell, Rolf [SKY:1U32:EXCH] wrote: > > Nick wrote: > > > I am trying to load some data from a files, the 6 and 7th bytes are an > > Integer and so are the 11th and 12th. How do I make them into an INT? This > > is what I used earlier > > > > char ver, type; > > int sz, tz; > > > > sz = file_buffer[6] + file_buffer[7]; > > is that right? > > No. Here's the right way to do it. This code is not edian safe. > > sz = *(short*)(file_buffer+6); (sorry... have to say it) They aren't endians, they're native arrangements. Please, be PC with your PC. One solution (kinda tricky because you need to make sure they are stored on a 2 byte boundary or hack around my trick, which is a hack itself). Given: void *buffer; make: char *c_buffer=(char *)buffer; make: short *i_buffer=(short *)buffer; then: short i = i_buffer[BYTE_OFFSET / 2]; (this should be a little more endian safe) Chris