如何用C++ static_cast将unsigned char数组转换为LPCSTR?
问题解答
C风格强制转换之所以能生效,是因为它会绕过C++的类型安全检查,而static_cast对类型转换的规则更严格——unsigned char*(数组名会隐式转为该类型)和const char*(即LPCSTR)属于不相关的指针类型,无法直接用static_cast转换。
要通过static_cast完成这个转换,需要借助void*作为中间过渡类型(C++允许static_cast在void*和其他对象指针之间双向转换),步骤如下:
- 先把
unsigned char数组(隐式转为unsigned char*)转换为void* - 再将
void*转换为char* - 最后将
char*转换为const char*(即LPCSTR)
对应代码可以写成:
SetDlgItemTextA(hdlg, IDC_EDIT_REQUEST, static_cast<LPCSTR>(static_cast<char*>(static_cast<void*>(buffer))));
如果觉得嵌套转换可读性差,也可以分步写:
unsigned char* buf_ptr = buffer; // 先转void*再转char* char* char_buf = static_cast<char*>(static_cast<void*>(buf_ptr)); // 最后转成LPCSTR(const char*) LPCSTR lpcstr_buf = static_cast<LPCSTR>(char_buf); SetDlgItemTextA(hdlg, IDC_EDIT_REQUEST, lpcstr_buf);
补充说明:如果场景允许,使用reinterpret_cast会更直接(它专门用于这种不相关指针类型的转换),代码是reinterpret_cast<LPCSTR>(buffer),但如果必须严格使用static_cast,上述方法是合规的解决方案。
内容的提问来源于stack exchange,提问作者user20716902
相关产品推荐
相关产品推荐

