In C++ is it possible to convert a \'const wchar_t *\' to \'unsigned char *\'?
How can I do that?
wstring dirName;
unsigned char* dirNameA = (unsigne
Try using reinterpret_cast. So:
unsigned char * dirNameA = reinterpret_cast<unsigned char *>(dirName.c_str());
That might not work because c_str returns a const wchar_t *so you can also try:
unsigned char * dirNameA = reinterpret_cast<unsigned char *>(
const_cast<wchar_t *>(dirName.c_str())
);
This works because hmac_sha256_init should accept a binary blob as its input, so the unicode string contained in dirName is an acceptable hash input.
But there's a bug in your code - the length returned by dirName.length() is a count of characters, not a count of bytes. That means that passing too few bytes to hmac_sha256_init since you're passing in a unicode string as a binary blob, so you need to multiply (dirName.length()) by 2.
Since you're using WinAPI, use WideCharToMultiByte.
You need to convert character by character. There are functions like wcstombs
to do this.