The UNIX and Linux Forums  

Go Back   The UNIX and Linux Forums > Top Forums > High Level Programming
Google UNIX.COM



View Single Post in UNIX Forums - Click on the Thread or Permalink to View Entire Thread -->
  #3 (permalink)  
Old 03-19-2002
AtleRamsli AtleRamsli is offline
Registered User
 

Join Date: Feb 2002
Location: Brabant, Belgium
Posts: 65
I wonder if you speak about two kinds of 'characters' lets say that an array contains

"ABCD" - those are four characters.
If you treat that as an integer you get the number
1145258561, or 0x44434241 - this is probaby what the original poster meant - _converted_ to characters, a number will take more space.
But any sequence of bytes can be seen as anything, char, float, char*, struct foo*,

So, when a network protocol sends 'characters'- you can make those characters mean anything you want, put two together, and you have a 16 bit short, etc.
But beware of how your machine stores integers!
The bytes above may have looked like
"BADC" on some machines to give the same number!
If I am not mistaken, I think the IBM PC is one of them ...

Look at
man htonl
man htons

Then you will understand why it just sends 'characters'- to make it an 'int'you use one of those functions, that puts the bytes in the right 'network'order, and put them back to local 'machine' order.


I often randomize characters with the % operator.

rand() % 10 gives 0-9

rand() % ('z'-'a') + 'a' is also an interesting contruct

Some fun: Remember that characters, int, floats and all that are really just bits.
If you want char is a certain range, maybe you can just chop off some bits!
0123456701234567
1001010011101011
0000111110000000 <- maybe you just want those
-----------------
0000010010000000

This would make it fast by just using one machine op,

AND byte, 000011111
__________________
PS
All of the above is to be read as '... unless I am wrong'
ENDPS

Last edited by AtleRamsli; 03-19-2002 at 03:27 AM.
Reply With Quote