convert unsigned to char

J

James Kuyper

AGRAJA said:
how to convert unsigned to char?

Use the cast operator: (char)
Ref: http://www.thescripts.com/forum/thread477545.html

how do I print without the leading ffffff (yet the result should be
char*)?

Printing a pointer type requires the "%p" format specifier. On the
machines I use most often, getting lots of leading 'f's is pretty much
unavoidable when using %p with valid pointer values. However, are you
sure you want the result to be char*? In context, I'd have expected that
you wanted to print a char, not a char*.

If that's the case, then you should use either "%d" or "%u" format
specifier, depending upon whether or not char is signed (if CHAR_MIN <
0, then char is a signed type). Either way, you're absolutely guaranteed
to not get any 'f's in the output. :)

However, I suspect that what you really want is to get no 'f's despite
using the "%x" specifier. On most implementations where 'char' is
unsigned, you're extremely unlikely to get leading f's when printing a
char value.

Therefore, I assume that you're using an implementation where 'char' is
signed. You still won't get many leading 'f's on most implementations,
unless the value you're converting to 'char' is greater than CHAR_MAX.
Don't do that! Performing such a conversion will either generate an
implementation-defined result, or cause an implementation-defined signal
to be raised. Either way, it's generally not a good thing to do. It's
likely to result in a negative number; if you convert that number to
unsigned, so that it can be printed using the "%x" format, then the
conversion will generally result in lots of leading 'f's.

I'd recommend using 'unsigned char' rather than 'char' for such purposes.
 
C

CBFalconer

pete said:
int main (void) {
unsigned u = 0;
char c = (char)u;

return 0;
}

int main (void) {
unsigned u = 0;
char c;

c = u; /* provided that u value <= CHAR_MAX */
return 0;
}

No cast needed. The error also happens with a cast.
 
K

Keith Thompson

James Kuyper said:
Use the cast operator: (char)

A cast is neither necessary nor helpful. Just assign it; the
conversion is implicit.
Printing a pointer type requires the "%p" format specifier. On the
machines I use most often, getting lots of leading 'f's is pretty much
unavoidable when using %p with valid pointer values. However, are you
sure you want the result to be char*? In context, I'd have expected
that you wanted to print a char, not a char*.

Neither the original post nor the cited web page mentions char* or
"%p".

[...]
 
P

Philip Potter

Keith said:
Neither the original post nor the cited web page mentions char* or
"%p".

The OP did indeed mention char* (and you quoted him):

What he meant by this, I have no idea.

Phil
 
J

James Kuyper

Keith said:
A cast is neither necessary nor helpful. Just assign it; the
conversion is implicit.

While that is true in an assignment context, the question as posed was
about conversion in general.
Neither the original post nor the cited web page mentions char* or
"%p".

???
"... (yet the result should be char*)?"

I don't know what the OP intended that to mean. The result of a
conversion to char is char, by definition. The result of a C expression
that prints something by calling printf() is a count of the characters
printed. The result, in a more informal sense, of printing something is
the appearance of a set of characters on the display device. I can't
figure out any meaning of "the result" which fits this context, for
which char* is the appropriate type.

However, since he DID mention char*, I decided to say something about
char*, even if what I said probably had nothing to do with what he
actually wanted. That was my (probably overly subtle) way of pointing
out to him that his comment about char* was unclear.
 
K

Keith Thompson

James Kuyper said:
While that is true in an assignment context, the question as posed was
about conversion in general.

Yes, but in most cases conversion from one arithmetic type to another
doesn't require a cast.
???
"... (yet the result should be char*)?"

Whoops, I missed that. D'oh!
I don't know what the OP intended that to mean. The result of a
conversion to char is char, by definition. The result of a C
expression that prints something by calling printf() is a count of the
characters printed. The result, in a more informal sense, of printing
something is the appearance of a set of characters on the display
device. I can't figure out any meaning of "the result" which fits this
context, for which char* is the appropriate type.

However, since he DID mention char*, I decided to say something about
char*, even if what I said probably had nothing to do with what he
actually wanted. That was my (probably overly subtle) way of pointing
out to him that his comment about char* was unclear.

I suspect the OP wanted a string.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,902
Latest member
Elena68X5

Latest Threads

Top