473,394 Members | 1,831 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,394 software developers and data experts.

Integer and character manipulation

Hello,

I need some help with the following:

1) I need to split a 16bit INT into two 8bit characters, and then be
able to join these two characters to form again the original 16bit
integer.

For example with values expressed in binary:

int n= 000000001111111;
--> char a=00000000;
--> char b=11111111;

and then be able to join a and b to form back n.
2) And last, I need to convert an integer into a string.
For example,

int n=3.142 ---> char string[5] = ['3','.','1','4','2']
Thank you very much!! I've tried working with casting but as far as I
know they don't seem to be the answer. I've also searched numerous
tutorials and web pages, but nothing productive. Any help or
suggestion will be highly appreciated. Thank you very much!!

Nov 15 '05 #1
10 3994

ru****@gmail.com wrote:
Hello,

I need some help with the following:

1) I need to split a 16bit INT into two 8bit characters, and then be
able to join these two characters to form again the original 16bit
integer.

For example with values expressed in binary:

int n= 000000001111111;
--> char a=00000000;
--> char b=11111111;

and then be able to join a and b to form back n.

You can use a mask for that.

a = n & 0xff00;
b = n & 0x00ff;

And use 'unsigned char' instead of 'char'. 'char' can be either
equivalent to 'unsigned char' or 'signed char'. If you rely on signed
char and use some value that cannot be represented with signed char,
then you may invoke implementation defined behavior or raise an
implementation defined signal.

2) And last, I need to convert an integer into a string.
For example,

int n=3.142 ---> char string[5] = ['3','.','1','4','2']

'int' is a part of the standard integer types and can't be used to
represent rationals. So you should either use an object type of float
or double. To produce a string from a given value of type float or
double, use sprintf/snprintf

Thank you very much!! I've tried working with casting but as far as I
know they don't seem to be the answer. I've also searched numerous
tutorials and web pages, but nothing productive. Any help or
suggestion will be highly appreciated. Thank you very much!!


casting is not a magical thing. The reason casting exists in the
language is for a few corner cases, namely: %p expecting a (void *)
with *printf family of functions. To compare the return value of mktime
to (time_t)-1 in case of error. For the is*, to* functions/macros.

There may be one or two other places that escape me at the moment but
not much else beyond that. The reason it doesn't produce a string is
because a cast yields a value of a given type, given a value. As there
does not exist a string type in C, then you can't expect that there
will be a string produced by a cast.
--
aegis

Nov 15 '05 #2
On 5 Sep 2005 12:03:12 -0700, ru****@gmail.com wrote:
Hello,

I need some help with the following:

1) I need to split a 16bit INT into two 8bit characters, and then be
able to join these two characters to form again the original 16bit
integer.

For example with values expressed in binary:

int n= 000000001111111;
--> char a=00000000;
--> char b=11111111;

and then be able to join a and b to form back n.
Look at the bitwise operators, especially "and" and shift.


2) And last, I need to convert an integer into a string.
For example,

int n=3.142 ---> char string[5] = ['3','.','1','4','2']
3.142 is not an integer value of any kind. Your array is not a
string. Perhaps you'd like to tell us what you really need rather
than provide an incorrect example.


Thank you very much!! I've tried working with casting but as far as I
know they don't seem to be the answer. I've also searched numerous
tutorials and web pages, but nothing productive. Any help or
suggestion will be highly appreciated. Thank you very much!!


You will get a lot more help if you post your code. We won't do you
homework for you.
<<Remove the del for email>>
Nov 15 '05 #3
On 5 Sep 2005 13:49:26 -0700, "aegis" <ae***@mad.scientist.com> wrote:

ru****@gmail.com wrote:
Hello,

I need some help with the following:

1) I need to split a 16bit INT into two 8bit characters, and then be
able to join these two characters to form again the original 16bit
integer.

For example with values expressed in binary:

int n= 000000001111111;
--> char a=00000000;
--> char b=11111111;

and then be able to join a and b to form back n.

You can use a mask for that.

a = n & 0xff00;


You are missing a shift. On most systems, the result of your
expression will not fit in a char.
b = n & 0x00ff;

And use 'unsigned char' instead of 'char'. 'char' can be either
equivalent to 'unsigned char' or 'signed char'. If you rely on signed
char and use some value that cannot be represented with signed char,
then you may invoke implementation defined behavior or raise an
implementation defined signal.

2) And last, I need to convert an integer into a string.
For example,

int n=3.142 ---> char string[5] = ['3','.','1','4','2']


'int' is a part of the standard integer types and can't be used to
represent rationals. So you should either use an object type of float
or double. To produce a string from a given value of type float or
double, use sprintf/snprintf

Thank you very much!! I've tried working with casting but as far as I
know they don't seem to be the answer. I've also searched numerous
tutorials and web pages, but nothing productive. Any help or
suggestion will be highly appreciated. Thank you very much!!


casting is not a magical thing. The reason casting exists in the
language is for a few corner cases, namely: %p expecting a (void *)
with *printf family of functions. To compare the return value of mktime
to (time_t)-1 in case of error. For the is*, to* functions/macros.

There may be one or two other places that escape me at the moment but
not much else beyond that. The reason it doesn't produce a string is
because a cast yields a value of a given type, given a value. As there
does not exist a string type in C, then you can't expect that there
will be a string produced by a cast.

<<Remove the del for email>>
Nov 15 '05 #4
Ian
ru****@gmail.com wrote:
Hello,

I need some help with the following:

1) I need to split a 16bit INT into two 8bit characters, and then be
able to join these two characters to form again the original 16bit
integer.

For example with values expressed in binary:

int n= 000000001111111;
--> char a=00000000;
--> char b=11111111;

and then be able to join a and b to form back n.

Sounds like homework! Mug up on shifting and masking.
2) And last, I need to convert an integer into a string.
For example,

int n=3.142 ---> char string[5] = ['3','.','1','4','2']

3.142.isn't an int, its a floating point value. Look up formatted output.

Ian
Nov 15 '05 #5

Barry Schwarz wrote:
On 5 Sep 2005 13:49:26 -0700, "aegis" <ae***@mad.scientist.com> wrote:

ru****@gmail.com wrote:
Hello,

I need some help with the following:

1) I need to split a 16bit INT into two 8bit characters, and then be
able to join these two characters to form again the original 16bit
integer.

For example with values expressed in binary:

int n= 000000001111111;
--> char a=00000000;
--> char b=11111111;

and then be able to join a and b to form back n.

You can use a mask for that.

a = n & 0xff00;


You are missing a shift. On most systems, the result of your
expression will not fit in a char.


Oops. Indeed. That should have been a = (n & 0xff00) >> 8;

b = n & 0x00ff;

And use 'unsigned char' instead of 'char'. 'char' can be either
equivalent to 'unsigned char' or 'signed char'. If you rely on signed
char and use some value that cannot be represented with signed char,
then you may invoke implementation defined behavior or raise an
implementation defined signal.

2) And last, I need to convert an integer into a string.
For example,

int n=3.142 ---> char string[5] = ['3','.','1','4','2']


'int' is a part of the standard integer types and can't be used to
represent rationals. So you should either use an object type of float
or double. To produce a string from a given value of type float or
double, use sprintf/snprintf

Thank you very much!! I've tried working with casting but as far as I
know they don't seem to be the answer. I've also searched numerous
tutorials and web pages, but nothing productive. Any help or
suggestion will be highly appreciated. Thank you very much!!


casting is not a magical thing. The reason casting exists in the
language is for a few corner cases, namely: %p expecting a (void *)
with *printf family of functions. To compare the return value of mktime
to (time_t)-1 in case of error. For the is*, to* functions/macros.

There may be one or two other places that escape me at the moment but
not much else beyond that. The reason it doesn't produce a string is
because a cast yields a value of a given type, given a value. As there
does not exist a string type in C, then you can't expect that there
will be a string produced by a cast.

<<Remove the del for email>>


Nov 15 '05 #6
Hi to all,

Firstly thank you very much all of you for such a quick answer.

Using the bitwise operators was the important hint, and yes, after
using the masks and shifting 8 positions I've finally got the high byte
and low byte separated as two 8 bit characters as I needed.

As for the second part, sorry, of course 3.142 isn't an int, just quick
writing and bad example. I'havent tried that part yet, but after more
searching I think that fcvtf will probably do the job.

Posting the whole code wont probably help, as these are just two little
parts I need for doing the big task. It is not actually homework, but
something I need to do after some long time without coding (and wasn't
too good either when I used to code more often).

Thank you once again :) I'll let you know If I encounter problems with
the second part, though I hope I don't ;)

Ian wrote:
ru****@gmail.com wrote:
Hello,

I need some help with the following:

1) I need to split a 16bit INT into two 8bit characters, and then be
able to join these two characters to form again the original 16bit
integer.

For example with values expressed in binary:

int n= 000000001111111;
--> char a=00000000;
--> char b=11111111;

and then be able to join a and b to form back n.

Sounds like homework! Mug up on shifting and masking.
2) And last, I need to convert an integer into a string.
For example,

int n=3.142 ---> char string[5] = ['3','.','1','4','2']

3.142.isn't an int, its a floating point value. Look up formatted output.

Ian


Nov 15 '05 #7
On 5 Sep 2005 14:38:26 -0700, ru****@gmail.com wrote:
Hi to all,

Firstly thank you very much all of you for such a quick answer.

Using the bitwise operators was the important hint, and yes, after
using the masks and shifting 8 positions I've finally got the high byte
and low byte separated as two 8 bit characters as I needed.

As for the second part, sorry, of course 3.142 isn't an int, just quick
writing and bad example. I'havent tried that part yet, but after more
searching I think that fcvtf will probably do the job.


Is fcvtf a standard function?
<<Remove the del for email>>
Nov 15 '05 #8
On Mon, 05 Sep 2005 14:30:25 -0700, aegis wrote:

Barry Schwarz wrote:
On 5 Sep 2005 13:49:26 -0700, "aegis" <ae***@mad.scientist.com> wrote:
....
>You can use a mask for that.
>
>a = n & 0xff00;


You are missing a shift. On most systems, the result of your
expression will not fit in a char.


Oops. Indeed. That should have been a = (n & 0xff00) >> 8;


That can have problems on systems with 16 bit ints because you could be
shifting a negative value.

Lawrence
Nov 15 '05 #9
Lawrence Kirby <lk****@netactive.co.uk> writes:
On Mon, 05 Sep 2005 14:30:25 -0700, aegis wrote:

Barry Schwarz wrote:
On 5 Sep 2005 13:49:26 -0700, "aegis" <ae***@mad.scientist.com> wrote:
...
You can use a mask for that.
>
>a = n & 0xff00;

You are missing a shift. On most systems, the result of your
expression will not fit in a char.


Oops. Indeed. That should have been a = (n & 0xff00) >> 8;


That can have problems on systems with 16 bit ints because you could be
shifting a negative value.


If ints were 16 bits, I'd be inclined to think 0xff00 would
be an unsigned int, which means n would be converted to unsigned
int before the '&' were done; the shift would then be working
on an unsigned int.
Nov 15 '05 #10
On Tue, 06 Sep 2005 03:14:13 -0700, Tim Rentsch wrote:

....
If ints were 16 bits, I'd be inclined to think 0xff00 would
be an unsigned int, which means n would be converted to unsigned
int before the '&' were done; the shift would then be working
on an unsigned int.


You're right, the problem in this case isn't in shifting a negative value,
is is converting a negative value to an unsigned type which won't preserve
the bit pattern on 1's complement and sign-magnitude based implementations.

Lawrence

Nov 15 '05 #11

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

10
by: dave | last post by:
I am reading input from a form. I want to validate the input by making sure that the string is actually an integer. How would I do this? Do i need to convert it to a character array and break down...
5
by: Mark | last post by:
Hello, I'm doing some data manipulation using an XML parser and am getting the following error message: Character reference "" is an invalid XML character. Any thoughts upon what this...
9
by: Adelson Anton | last post by:
I need to iterate characters in a loop. For example, all the letter from a to r. In C I would just do that: char c; for (c='a'; c<='r'; c++) It doesn't work in JS. Thanks.
15
by: Beeeeeves | last post by:
Is there a quick way to find the index of the first character different in two strings? For instance, if I had the strings "abcdefghijkl" and "abcdefxyz" I would want the return value to be...
17
by: Yogi_Bear_79 | last post by:
I have the following code: sscanf(line, "%d", n_ptr) !=1 || n_ptr <=0; It only partially works. If the user types a character other than 0-9 to start the string it fails. However as long as...
13
by: Freaker85 | last post by:
Hello, I am new at programming in C and I am searching a manner to parse a string into an integer. I know how to do it in Java, but that doesn't work in C ;o) I searched the internet but I...
232
by: robert maas, see http://tinyurl.com/uh3t | last post by:
I'm working on examples of programming in several languages, all (except PHP) running under CGI so that I can show both the source files and the actually running of the examples online. The first...
3
by: rob.ahlberg | last post by:
I got an integer what I trying to use with allegro function textout_ex() but it wants an char/char* as arg... And I really don't know how to cast it to one...
3
by: amija0311 | last post by:
Hi, I am new using DB2 9.1 database by windows base. I want to query the data that contain string then translate the string into integer using DB2. The problems is If the data is null, i got the...
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.