static_cast can be used to convert a pointer of type void * to a pointer of type T * or from a pointer of type T * to a pointer of type void * . reinterpret_cast designed to convert a pointer from one type to another type when both pointers are not void * pointers
From standard C ++ (5.2.10 Reinterpret cast)
7 An object pointer can be typed a type. 7.71 an anonymous pointer can be typed, a result is a static_cast (static_cast (v)). . Conversion of the “T1” to the type of “pointer to the T2” (where T1 and T2 are those types of T1) pointer value.
For the example code snippet from your question, this would look like this with the use of static_cast :
is3.read(static_cast<char*>(static_cast<void *>(&value)), sizeof(value));