Thread: convert to integer...

  1. #1
    Registered User
    Join Date
    Oct 2006

    convert to integer...

    Hi friends.
    this is my code
    int main()
            char buf[4]={'5','a','4','b'};
            int i;
            return 0;
    what i wanted to know is ...when there is an array of 4 charecters...can i take that to an integer..(where int is 4 bytes). say the array is '5' 'a' '4' 'b' and when i take this array to a single integer of 4 bytes i want the exact "5a4b" in the this possible anyway...just a thing struck my mind....

  2. #2
    Registered User
    Join Date
    Sep 2006
    Many machines have alignment requirements for various types - for example, allowable int addresses may only be one every 4 bytes (assuming an int is 4 bytes). In this case, if you try to cast a char pointer to an int pointer and dereference, you will often get a segfault, since you only have a 1 in 4 chance of having a valid int address. To avoid this, you can instead define an array of ints, and then cast the int pointers to char pointers. I don't know if just respecting this makes things portable though.

  3. #3
    "I Win!" by U. Lose vart's Avatar
    Join Date
    Oct 2006
    Rishon LeZion, Israel
    To be or not to be == true

  4. #4
    Registered User
    Join Date
    Oct 2006
    wow... thanks vart i wonder how u guys got these tricks and knowledge in C...
    thanks a lot for that link...
    Quote Originally Posted by robatino
    since you only have a 1 in 4 chance of having a valid int address.
    sorry robatino i didnt get what u are telling....

  5. #5
    Registered User
    Join Date
    Sep 2006
    Well, I don't know about the probability, but if the alignment restriction holds, only one out of every 4 possible char addresses is a valid int address (if sizeof(int) == 4). Typically it would be just those addresses that are divisible by 4.
    For example, on my machine the output of
    #include <iostream>
    int main() {
      double d;
      std::cout << "double d address is " << (void *)&d << "\n";
      float f;
      std::cout << "float f address is " << (void *)&f << "\n";
      char c;
      std::cout << "char c address is " << (void *)&c << "\n";

    double d address is 0xbff79798
    float f address is 0xbff79794
    char c address is 0xbff79793

    (I remember reading recently that one should cast pointers to void * to print them, and the char pointer printed as garbage until I did this.) Notice that the addresses of d, f, and c are divisible by 8, 4, and 1, corresponding to the sizes.

    Edit: Sorry for the code, I keep forgetting when I post to the C board instead of the C++ board. I don't remember offhand how to print a pointer using printf() but you should be able to look it up.
    Last edited by robatino; 01-22-2007 at 04:15 AM.

  6. #6
    Registered User
    Join Date
    Oct 2006
    oh.. thanks robatino...i got it...

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Replies: 7
    Last Post: 08-19-2007, 08:10 AM
  2. Convert integer to char..
    By sniper83 in forum C Programming
    Replies: 7
    Last Post: 07-18-2007, 01:23 PM
  3. convert from an integer to an unsigned char
    By Landroid in forum C Programming
    Replies: 4
    Last Post: 05-02-2005, 01:43 AM
  4. Linked Lists Integer addition ? HELP Please??
    By green_eel in forum C Programming
    Replies: 3
    Last Post: 03-12-2003, 04:36 PM
  5. please help ... to convert date to string
    By mel in forum C Programming
    Replies: 1
    Last Post: 06-12-2002, 10:26 AM