thanks. I got what your saying. that helps. :)

Thanks,
_|_|_|_|_|  _|        _|_|_|_|            
    _|      _|_|_|    _|          _|_|_|  
    _|      _|    _|  _|_|_|    _|        
    _|      _|    _|  _|        _|        
    _|      _|    _|  _|_|_|_|    _|_|_|  
Visit TDS for quality software and website production
http://tysdomain.com
msn: [EMAIL PROTECTED]
aim: st8amnd2005
skype: st8amnd127
  ----- Original Message ----- 
  From: David Hamill 
  To: [email protected] 
  Sent: Wednesday, October 08, 2008 3:01 AM
  Subject: Re: [c-prog] Ensuring ints are written as 32 bits


  Tyler asked:
  > I assume that could be done to get the equiv of the 
  > microsoft lobyte, loword, hiword, hibyte and etc?
  > If that's to combine them, how would you get them apart?

  I should have stressed that the conversion from integer to 
  chars is implementation-independent. C guarantees a char to 
  be a single byte (not necessarily of 8 bits!) and that 
  integers are represented in such a way that bitwise 
  operations on them make sense. (Otherwise there'd be little 
  point in having bitwise operators.)

  I don't know what Microsoft's own types are but they're 
  probably #define'd in a header file somewhere in terms of 
  C's basic types. The Gnu C library does this for its own 
  types like uint32_t (guaranteed to be 32 bits no matter what 
  machine is used).

  To go the other way (char[] to integer) can be done using 
  shift and add operations:

  #include <stdio.h>
  #include <limits.h>

  int main(void)
  {
  unsigned long long i = 1234567890;
  unsigned long long j;
  unsigned char c[4];

  printf("Your integers are %i bits\n", CHAR_BIT * 
  sizeof(i));

  /* Integer to char[]: */

  c[0] = i & 0xff; /* least significant byte */
  c[1] = (i & 0xff00) >> 8;
  c[2] = (i & 0xff0000) >> 16;
  c[3] = (i & 0xff000000) >> 24;

  printf("0x%08x == ", i);
  printf("0x%02x%02x%02x%02x", c[3], c[2], c[1], c[0]);

  /* char[] to integer: */

  j = c[0] + (c[1] << 8) + (c[2] << 16) + (c[3] << 24);
  printf(" == 0x%08x\n", j);

  return 0;
  }

  You need to ensure that your integer type is big enough to 
  hold the result without overflowing!

  David



   

  __________ NOD32 3502 (20081007) Information __________

  This message was checked by NOD32 antivirus system.
  http://www.eset.com


[Non-text portions of this message have been removed]

Reply via email to