On Mon, 30 Jun 2003 15:25:14 GMT, James Leddy <>
wrote in comp.lang.c:
> Hello,
>
> I know you can cast a void pointer to an int, char, or any other type of
> pointer, but can you do the reverse, cast an int or char pointer as a void
> pounter?
If you are using C, no cast is necessary for pointers. You can assign
a pointer to void to a pointer to any other object type. You can
assign a pointer to any object type to a pointer to void. No cast at
all.
If your compiler requires a cast, you are using a C++ compiler.
On the other hand, casting a pointer type to a char or an int may
result in undefined behavior.
> This is the blowfish encipher algorithim and I need to make xl and xr void
> because they come from a char * buffer, but I need them as unsigned longs.
>
> void encipher_dword(void *xl, void *xr)
> {
> unsigned long *temp;
> unsigned long *al, *ar;
> int i;
>
> al = (unsigned long *) xl;
> ar = (unsigned long *) xr;
This assignment does not require a cast, unless you are using C++, in
which case you are posting in the wrong newsgroup.
But without seeing the code that calls this, there is no way of
telling if xl and xr are properly aligned to point to unsigned longs.
If not, the result is undefined behavior when you try to dereference
them. On some platforms the system will shut down your program with
some sort of bus error.
> for (i = 0; i < N; i++) {
> *al = *al ^ P[i];
> *ar = f(al) ^ *ar;
> SWAP(al, ar, temp);
> }
> SWAP(al, ar, temp);
>
> *ar = *ar ^ P[N];
> *al = *al ^ P[N + 1];
> xl = (void *) al; //can I do this?
> xr = ar; //should I do it like this?
> }
>
> I thought of another solution being to swap the actual values in al and ar,
> insted of just the addresses, but I thought that would be slower
> implementation.
>
> Thanks,
If you are concerned with speed, don't settle for what you thought.
Write a program and test it.
--
Jack Klein
Home:
http://JK-Technology.Com
FAQs for
comp.lang.c
http://www.eskimo.com/~scs/C-faq/top.html
comp.lang.c++
http://www.parashift.com/c++-faq-lite/
alt.comp.lang.learn.c-c++
ftp://snurse-l.org/pub/acllc-c++/faq