Hi Phil, Jon Thanks, now I'm clear with this, assignment doesn't care with type modifier. Code such as unsigned int j = 0xffeeddcc; int i = j; Both has the same value depending on how them interpreted (is this assumption correct?) Because, printf("%u", i) will be different to printf("%i", i) - but - printf("%u", i) wlll be same as printf("%u", j) Actually why asking this because I often see a pointer to a char* cast Let me show you with this example. Consider some structures... struct a_data { unsigned char f1[4]; unsigned char f2[6]; unsigned short f3[2]; }; and another struct named b_data, c_data, etc. Then there is a general function to process all type of structure, maybe something like this: int process_data(char *buffer, size_t len); Then if we cast for example a pointer to a_data struct to a char* as follow: struct a_data a; process_data((char*) &a, sizeof(a)); I though since it was cast to char*, the cast is "problem" because every signed char buffer will have a range CHAR_MIN to CHAR_MAX, therefore value of CHAR_MAX to UCHAR_MAX will broken (signed char overflow) I think process_data() should be declared with int process_data(unsigned char *buffer, size_t len) this declaration in seem correct and work for me. However, now I'm conceptually understand why this works. Thanks. -- To unsubscribe from this list: send the line "unsubscribe linux-c-programming" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html