Q:

Which of (unsigned char)str vs str + 0xff or (unsigned int)value vs value + 0xffff Is Faster and Preferred Method? 

I want to know which of the following constructs is preferred and faster. 
unsigned char str1 = (unsigned char)str2 vs unsigned char str1 = str2 & 0xff
or
unsigned value1 = (unsigned)value2 vs unsigned value1 = value2 & 0xffffffff
Questions:
 - by converting from to:
 - Is 1st faster than 2nd (0xff or 0xffffffff)? 
 - Which do you prefer to use?  and which is better to use? 
 - Can (unsigned char)str can be changed as str & 0xff? 

A:

No two of those four code snippets do the same thing.  Any speed difference between them is both irrelevant (since code that runs faster but does the wrong thing is worthless) and negligible (they're all pretty fast). 
Edit for updated question:
Assuming that CHAR_BIT == 8, and that str is one of: an unsigned integer; a signed integer with positive value; a signed integer with 2's complement representation; then (unsigned char) str gives the same numeric result as str & 0xff, but with a different type.  Whichever one you write, the compiler will pick a fast way to compute that result, quite possibly the same way in both cases.  So you may as well just write unsigned char str1 = str2;, and add the cast to (unsigned char) if needed to suppress any compiler warning you get for an implicit conversion that loses information. 
On most implementations, unsigned is a 32 bit type, in which case (unsigned)value2 produces different values from value2 & 0xffff for value2 greater than 65535.  Leaving that aside (so assuming you're on a 16 bit implementation), it's the same deal as with unsigned char except that provided value2 also has type unsigned then the results have the same type as well as the same value.