Попробуйте использовать reinterpret_cast.Итак:
unsigned char * dirNameA = reinterpret_cast<unsigned char *>(dirName.c_str());
Это может не сработать, потому что c_str возвращает const wchar_t *, поэтому вы также можете попробовать:
unsigned char * dirNameA = reinterpret_cast<unsigned char *>(
const_cast<wchar_t *>(dirName.c_str())
);
Это работает, потому что hmac_sha256_init должен принимать двоичный двоичный объект в качестве входных данных,поэтому строка юникода, содержащаяся в dirName, является допустимым вводом хеша.
Но в вашем коде есть ошибка - длина, возвращаемая функцией dirName.length (), представляет собой количество символов, а не количество байтов.Это означает, что передача hmac_sha256_init слишком малого количества байтов, поскольку вы передаете строку Юникода в виде двоичного двоичного объекта, поэтому вам нужно умножить (dirName.length ()) на 2.