Re: exercise on reinterpret_cast
Fil <Fil@discussions.microsoft.com> wrote:
void func(void* p,short int s,unsigned char v)
{
unsigned char * pp=reinterpret_cast<unsigned char*>(p);
for (int i=0;i<s;i++)
{
*(pp+i)=v;
}
}
std::cout << "gimme a value I will force those bytes to" << std::endl;
char j;
std::cin >> j;
func(p,i,j);
I am then expecting that, if I set my whoke array to zero, and I
suggest to change just one byte to 255, I'll have iA[0]=255 and all
the other worth 0 (my int are 4 bytes long so when I change 1 byte I
just change part of the first int and shouldn't touch the rest).
But I get 50 for the first element instead.
When you do cin >> j, and j is a char variable, you just read one
character from the stream. The input is "255", and j gets the first
character of that. It so happens that the ASCII code for '2' is 50,
which is what you pass to func().
--
With best wishes,
Igor Tandetnik
With sufficient thrust, pigs fly just fine. However, this is not
necessarily a good idea. It is hard to be sure where they are going to
land, and it could be dangerous sitting under them as they fly
overhead. -- RFC 1925