Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people, just like you, are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions

typecasting in C

Posted on 2009-05-14
Last Modified: 2012-05-07
I need to typecast integer value into char array and char array to integer value ..
using C language ...how can I do it...

int i = 20;
char send[4] = ?         // here i must have the interger value as char...

similarly how to convert char to integer
Question by:shragi
  • 6
  • 3
LVL 40

Expert Comment

ID: 24382735
You can't typecast between and array and an int but you can copy the memory between them using memcpy. Something like...

memcpy(&i, send, sizeof(int));
memcpy(send, &i, sizeof(int));

void * memcpy ( void * destination, const void * source, size_t num );

Note, that the result you'll get from this will be dependent upon the endianess of the platform you are using. THis being the case this code is non-portable.

Alternatively, use a union

union myUnion
   int i;
   char send[4];


Note the C standard doesn't require an int to be 4 bytes so the code examples above are non-portable. This isn't likely to be a problem if you are only targeting a single platform but it is something you need to be aware of.
LVL 40

Expert Comment

ID: 24382752
>> You can't typecast between and array
Actually, just to clarify... you can but the result won't be what you are expecting. Sorry I didn't mean that statement to be misleading... what you want to do isn't typecast but to convert and the semantics and the result are different.

Author Comment

ID: 24382759
actually i need to send a char msg ....I can send only char.... so I need to convert to the int to char...

actually i need to send that integer value...

Netscaler Common Configuration How To guides

If you use NetScaler you will want to see these guides. The NetScaler How To Guides show administrators how to get NetScaler up and configured by providing instructions for common scenarios and some not so common ones.


Author Comment

ID: 24382764
ya  i need to convert to char....

and later I need to covert that char to integer again...
LVL 40

Expert Comment

ID: 24382784
Ok, so I've shown you how to do that above {http:#24382735} ... do you need any more clarification? Is there something that doesn't make sense that maybe I can try and explain better for you?

Author Comment

ID: 24382896
no i could get ur point...

can i able to convert int to char  in C language....
LVL 40

Expert Comment

ID: 24383033
>> can i able to convert int to char  in C language

You can assign an int to a char but this will lose data (a char normally being only 1 byte and an int 4 on most 32 bit platforms) so to prevent the compiler warning you it is necessary to use a cast.

int i = <somevalue>;
char c = (char) i;

Expert Comment

by:Subrat (C++ windows/Linux)
ID: 24392315
int i = 20;
char send[4] = ?

Here what u want to store?
  Here 'Send' can hold 4 chars. But u are having only one int.
  So if u want to store one int only, u can use
               send[0] = (char) i;
  evilrix has already explained well how to use UNION.

If u want all field of array should contain value of i, the can use
      int i = 20;
      char arr[4] = {(char)i, (char)i,(char)i, (char)i};
      OR //char arr[4] = {i, i, i, i};
//Botth are acceptable. but problem is if value of i is greater than 255 then it'd be trucated.There is also another logic

      for(int x = 0; x<4; ++x)
            printf("%c ", arr[x]);// If u want char to be printed. If want integer to be printed u can use %i instead of %c

Actually, if u can  explain ur need completely, like waht exactly u want, it'll help us to help u in a better way.  
LVL 40

Expert Comment

ID: 24393787
shragi, do you need any more information on this? If so please ask away, otherwise please don't forget to close your question when you have suitable answers.
LVL 40

Accepted Solution

evilrix earned 250 total points
ID: 24708845
>> Please make your recommendations here

The question was, "I need to typecast integer value into char array and char array to integer value .."

http:#24392315 doesn't provide a solution to this. It suggests casting an int type into *each* char within the array, which will not achieve what the asker is asking for and will result in data loss as I explain here http:#24382752 and here http:#24383033...

int i = 4321;
char send[4] = {(char)i, (char)i,(char)i, (char)i};

Will result in 'send' being as follows...

send[0] == -31; // in most cases char is a signed type (but doesn't have to be!)
send[1] == -31;
send[2] == -31;
send[3] == -31;

And there is no way to revert back to the original int value.

This is not serialising an int into a 4 char array, to do that you need to perform a bitwize copy, I explain here http:#24382735

memcpy(&i, send, sizeof(int)); // bitwize copy if int into 4 char array
memcpy(send, &i, sizeof(int)); // bitwize copy of 4 char array to int

It should also be noted that a char doesn't have to be the size of a byte (although I have yet to see a platform where it's not) and int doesn't have to be 4 bytes in size.

I'd like to think that I've already providing working solution for the asker; however, I am happy to expand further if more information is required.

Featured Post

Are your AD admin tools letting you down?

Managing Active Directory can get complicated.  Often, the native tools for managing AD are just not up to the task.  The largest Active Directory installations in the world have relied on one tool to manage their day-to-day administration tasks: Hyena. Start your trial today.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Windows programmers of the C/C++ variety, how many of you realise that since Window 9x Microsoft has been lying to you about what constitutes Unicode (http://en.wikipedia.org/wiki/Unicode)? They will have you believe that Unicode requires you to use…
This is a short and sweet, but (hopefully) to the point article. There seems to be some fundamental misunderstanding about the function prototype for the "main" function in C and C++, more specifically what type this function should return. I see so…
The goal of this video is to provide viewers with basic examples to understand recursion in the C programming language.
The goal of this video is to provide viewers with basic examples to understand opening and reading files in the C programming language.

791 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question