string s = "876c0e09-70f7-4190-ab3a-254b6e5f461e";
byte[] data = Encoding.Unicode.GetBytes(s);
byte[] hash = new MD5CryptoServiceProvider().ComputeHash(data);
StringBuilder sb = new StringBuilder();
foreach (var b in hash)
{
   sb.Append(b.ToString("x2"));
}
string outVAR = sb.ToString();
Console.WriteLine(outVAR);string ToBytes(const wstring& str) {
    const char* d = reinterpret_cast<const char*>(&str[0]);
    string result(d, d+str.size()*2);
    return result;
}
int main() {
    wstring data = L"876c0e09-70f7-4190-ab3a-254b6e5f461e"; // на винде это будет UTF-16 строка, как и в C#
    cout << md5(ToBytes(data)) << endl;
    system("pause");
}d1206f6bcf6d9b31860482123c288650std::string WinMD5(const void * data, const size_t data_size)
{
    HCRYPTPROV hProv = NULL;
    if (!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_AES, CRYPT_VERIFYCONTEXT)) {
        return std::string();
    }
    HCRYPTPROV hHash = NULL;
    BOOL hash_ok = CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash);
   
    if (!hash_ok) {
        CryptReleaseContext(hProv, 0);
        return std::string();
    }
    if (!CryptHashData(hHash, static_cast<const BYTE *>(data), static_cast<DWORD>(data_size), 0)) {
        CryptDestroyHash(hHash);
        CryptReleaseContext(hProv, 0);
        return std::string();
    }
    DWORD cbHashSize = 0, dwCount = sizeof(DWORD);
    if (!CryptGetHashParam(hHash, HP_HASHSIZE, (BYTE *)&cbHashSize, &dwCount, 0)) {
        CryptDestroyHash(hHash);
        CryptReleaseContext(hProv, 0);
        return std::string();
    }
    std::vector<BYTE> buffer(cbHashSize);
    if (!CryptGetHashParam(hHash, HP_HASHVAL, reinterpret_cast<BYTE*>(&buffer[0]), &cbHashSize, 0)) {
        CryptDestroyHash(hHash);
        CryptReleaseContext(hProv, 0);
        return std::string();
    }
    std::ostringstream oss;
    for (auto item: buffer) {
        oss << static_cast<unsigned int>(item);
    }
    CryptDestroyHash(hHash);
    CryptReleaseContext(hProv, 0);
    return oss.str();
}
string ToBytes(const wstring& str) {
    const char* d = reinterpret_cast<const char*>(&str[0]);
    string result(d, d+str.size()*2);
    return result;
}
int main() {
    wstring data = L"876c0e09-70f7-4190-ab3a-254b6e5f461e";
    cout << WinMD5(data.data(), data.size()* sizeof(wchar_t));
    system("pause");
}2093211110720710915549134413018604013480      Дополнено: представим что я скинул эту программу другу, у него нету qtcreator, но он хочет запустить программу с интерфейсом на своём пк, что ему делать?Её нужно собрать и поставлять вместе со всеми библиотеками: https://evileg.com/ru/post/163/
 
  
   
  
   
  
  (сразу - никак Qt)
HDC hdcMem = CreateCompatibleDC(hdc); // создаете совместимый контекст
HBITMAP hbmOld = SelectObject(hdcMem, hBitmap); // устанавливаете там свой bitmap
GetPixel(hdc, x, y); // получаете свой пиксель
SelectObject(hdcMem, hbmOld); // возвращаете назад битмап контекста
DeleteDC(hdcMem); // удаляете контекст, что уже не нужен
); 
  
  Вопрос довольно короток. Есть ли смысл изучать сначала С, а потом С++?
Чем лучше программист знает С, тем труднее будет для него при программировании на С++ отойти от
стиля программирования на С.
Для изучения С++ не обязательно знать С. Программирование на С способствует усвоению приемов и
даже трюков, которые при программировании на С++ становятся просто ненужными.
Тем не менее, хорошие программы на языке С по сути являются
программами на С++. Например, все программы из классического описания С (K&R) являются
программами на С++. В процессе изучения С++ будет полезен опыт работы с любым языком со
статическими типами.
