(Много теоретических и концептуальных объяснений было дано выше)
Ниже приведены некоторые практические примеры, когда я использовал static_cast, dynamic_cast, const_cast, reinterpret_cast.
(Также ссылается на это, чтобы понять объяснение: http://www.cplusplus.com/doc/tutorial/typecasting/ )
static_cast:
OnEventData(void* pData)
{
......
// pData is a void* pData,
// EventData is a structure e.g.
// typedef struct _EventData {
// std::string id;
// std:: string remote_id;
// } EventData;
// On Some Situation a void pointer *pData
// has been static_casted as
// EventData* pointer
EventData *evtdata = static_cast(pData);
.....
}
dynamic_cast:
void DebugLog::OnMessage(Message *msg)
{
static DebugMsgData *debug;
static XYZMsgData *xyz;
if(debug = dynamic_cast(msg->pdata)){
// debug message
}
else if(xyz = dynamic_cast(msg->pdata)){
// xyz message
}
else/* if( ... )*/{
// ...
}
}
const_cast:
// *Passwd declared as a const
const unsigned char *Passwd
// on some situation it require to remove its constness
const_cast(Passwd)
reinterpret_cast:
typedef unsigned short uint16;
// Read Bytes returns that 2 bytes got read.
bool ByteBuffer::ReadUInt16(uint16& val) {
return ReadBytes(reinterpret_cast(&val), 2);
}
Функция преобразования PHP преобразует ведущие символы и игнорирует остальные. Вы можете сделать что-то подобное в C #, извлекая ведущие цифры с помощью Regex.Match
, затем вызывая Int32.Parse
, чтобы преобразовать подстроку в int
:
String s = Regex.Match("404, Error", @"^\d+").Value;
Console.WriteLine(Int32.Parse(s));
// 404