Please note that this is not homework and i did search before starting this new thread. I got Store an int in a char array?
I was looking for an answer but didn\'t get a
The use of atoi
function is only justified when the string that you are expecting to decode was build by your own code and no further than a couple of lines above. I.e it is only usable in sketch-like code.
Otherwise, especially in your case, when the data arrives from the network, atoi
function cannot be meaningfully used to perform decoding, since it provides no usable error handling mechanism and absolutely no protection from overflow (undefined behavior on overflow). The only function that can be meanigfully used for string-to-integer conversion is a function from the strto...
group, strtol
in your case.
Use XDR (RFC 4506).
At least to be portable you should think about possible different byte order on encoding.
Do you really need to implement new networking messaging protocol? Don't NASA IPC or Sun RPC suit you? They both are stable enough, NASA is simpler to startup, RPC seems available more widely (yes, it is ready to use and library is available for most popular systems).
I've looked at this page a million times, and I really appreciate all the other answers for helping me out. Here is the stub I am using, which is unique from other answers because it can be used in a for loop:
void encode_int_as_char(int num, char *buf, int length){
int i;
for (i = 0; i < length; i++){
buf[i] = (char)(num >> ((8 * (length - i - 1)) & 0xFF));
}
}
int decode_int_from_char(char *enc, int length){
int i, num, cur;
num = 0;
for (i = 0; i < length; i++){
cur = (unsigned char) enc[i] << (8 * (length - i - 1));
num += (int) cur;
}
return num;
}