Re: Trying to come to terms with typecasting operators
Hm.
Wrote the code and the post in parallel, so I lost the
point first time around.
In the code below is the test using reinterpret_cast<>
added, along with the corresponding added output.
As can be seen, each char value is preceeded by a number
of leading zeros that I am unable to get rid of. I assume
this has something to do with memory footprints and/or byte
ordering (I am using VS2008 on a PC, which, according to
http://en.wikipedia.org/wiki/Endianness
means that the internal byte organization is little-endian).
Rune
--------------- Output ----------------
a) Naive output:
0 1 2 3
b) C-style type cast:
30 31 32 33
c) Type cast by variable assignment:
30 31 32 33
d) reinterpret_cast:
00000030 00000031 00000032 00000033
---------------------------------------
///////////////////////////////////////////////////////////////////////////?//
#include <iomanip>
#include <iostream>
int main()
{
// Hex values of digits: 0 1 2 3
unsigned char c[] = {0x30,0x31,0x32,0x33};
std::cout << "a) Naive output:" << std::endl;
for (size_t n = 0; n != 4; ++n)
{
std::cout << std::hex << c[n] << " ";
}
std::cout << std::endl << std::endl;
std::cout << "b) C-style type cast:" << std::endl;
for (size_t n = 0; n != 4; ++n)
{
std::cout << std::hex << (unsigned int) c[n] << " ";
}
std::cout << std::endl << std::endl;
std::cout << "c) Type cast by variable assignment:" << std::endl;
for (size_t n = 0; n != 4; ++n)
{
size_t d = c[n];
std::cout << std::hex << d << " ";
}
std::cout << std::endl;
///////////////////////////////////////////////////
std::cout << "d) reinterpret_cast:"
<< std::endl;
for (size_t n = 0; n != 4; ++n)
{
std::cout << std::hex << reinterpret_cast<int*> (c[n]) << " ";
}
std::cout << std::endl << std::endl;
///////////////////////////////////////////////////
return 0;
}
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]