zoukankan      html  css  js  c++  java
  • Visual C++ 基础数据类型的转换

    16.1如何将基本数据类型转换成CString类型

    用CString的Format方法

    void CDemoView::OnDraw(CDC* pDC)
    {
        int a = 100;
        double b = 1.23;
        //将整型转换成CString
        CString str1 = _T("");
        str1.Format(_T("%d"), a);
        //将实型转换成CString
        CString str2 = _T("");
        str2.Format(_T("%f"), b);
        CString strText = _T("");
        strText.Format(_T("str1 = %s"), str1);
        pDC->TextOut(100, 50, strText);
        strText.Format(_T("str2 = %s"), str2);
        pDC->TextOut(100, 100, strText);
    }
    

    16.2如何将CString类型转换成基本数据类型

    atoi:Convert a string to integer.
    参考:http://baike.baidu.com/view/653935.htm

    void CDemoView::OnDraw(CDC* pDC)
    {
        CString str1 = _T("100");
        CString str2 = _T("1.23");
        //将CString转换成整型
        int a = atoi(str1);
        //将CString转换成实型
        double b = atof(str2);
        CString strText = _T("");
        strText.Format(_T("a = %d"), a);
        pDC->TextOut(100, 50, strText);
        strText.Format(_T("b = %f"), b);
        pDC->TextOut(100, 100, strText);
    }
    

    16.3如何将TCHAR类型转换成CString类型

    void CDemoView::OnDraw(CDC* pDC)
    {
        TCHAR sz[] = _T("Hello world!");
        //直接赋值
        CString str1 = sz;
        //调用CString::Format函数
        CString str2 = _T("");
        str2.Format(_T("%s"), sz);    
        CString strText = _T("");
        strText.Format(_T("str1 = %s"), str1);
        pDC->TextOut(100, 50, strText);
        strText.Format(_T("str2 = %s"), str2);
        pDC->TextOut(100, 100, strText);
    }
    

    16.4如何将CString类型转换成TCHAR类型

    void CDemoView::OnDraw(CDC* pDC)
    {
        CString str = _T("Hello world!");
        //强制转换
        LPTSTR psz1 = (LPTSTR)(LPCTSTR)str;
        //调用CString::GetBuffer函数
        LPTSTR psz2 = str.GetBuffer(str.GetLength());
        str.ReleaseBuffer();
     
        CString strText = _T("");
        strText.Format(_T("psz1 = %s"), psz1);
        pDC->TextOut(100, 50, strText);
        strText.Format(_T("psz2 = %s"), psz2);
        pDC->TextOut(100, 100, strText);
    }
    

    16.5如何将TCHAR类型转换成BSTR类型

    void CDemoView::OnDraw(CDC* pDC)
    {
        TCHAR sz[] = _T("Hello world!");
        //调用ConvertStringToBSTR函数
        BSTR bstr1 = _com_util::ConvertStringToBSTR(sz);
        //使用_bstr_t
        BSTR bstr2 = _bstr_t(sz);
        CString strText = _T("");
        strText.Format(_T("bstr1 = %s"),  (CString)bstr1);
        pDC->TextOut(100, 50, strText);
        strText.Format(_T("bstr2 = %s"),  (CString)bstr2);
        pDC->TextOut(100, 100, strText);
    }
    

    16.6如何将BSTR类型转换成TCHAR类型

    void CDemoView::OnDraw(CDC* pDC)
    {
        BSTR bstr = L"Hello world!";
        //调用ConvertBSTRToString函数
        LPTSTR psz = _com_util::ConvertBSTRToString(bstr);
        CString strText = _T("");
        strText.Format(_T("psz = %s"), psz);
        pDC->TextOut(100, 50, strText);
    }
    

    16.7 如何将BSTR类型转换成CString类型

    SysAllocString和SysFreeString

    void CDemoView::OnDraw(CDC* pDC)
    {
        BSTR bstr = ::SysAllocString(L"Hello world!");
        //强制转换
        CString str = (CString)bstr;
        CString strText = _T("");
        strText.Format(_T("str = %s"), str);
        pDC->TextOut(100, 50, strText);
        ::SysFreeString(bstr);
    }
    

    16.8如何将CString类型转换成BSTR类型

    void CDemoView::OnDraw(CDC* pDC)
    {
        CString str = _T("Hello world!");
        //调用CString::AllocSysString函数
        BSTR bstr = str.AllocSysString();
        CString strText = _T("");
        strText.Format(_T("bstr = %s"), (CString)bstr);
        pDC->TextOut(100, 50, strText);
     
        ::SysAllocString(bstr);
    }
    

    16.9 如何将DWORD类型转换成WORD类型

    LOWORD和HIWORD

    void CDemoView::OnDraw(CDC* pDC)
    {
        //将1个DWORD类型数据分解成2个WORD类型数据
        DWORD dwValue = 0xFFAA5500;
        WORD wLow = LOWORD(dwValue);
        WORD wHigh = HIWORD(dwValue);
        CString strText = _T("");
        strText.Format(_T("DWORD:0x%08X"), dwValue);
        pDC->TextOut(100, 50, strText);
        strText.Format(_T("low-order word:0x%04X"), wLow);
        pDC->TextOut(100, 100, strText);
        strText.Format(_T("high-order word:0x%04X"), wHigh);
        pDC->TextOut(100, 150, strText);
    }
    

    16.10 如何将WORD类型转换成BYTE类型

    LOBYTE和HIBYTE

    void CDemoView::OnDraw(CDC* pDC)
    {
        //将1个WORD类型数据分解成2个BYTE类型数据
        WORD wValue = 0xFF00;
        BYTE bLow = LOBYTE(wValue);
        BYTE bHigh = HIBYTE(wValue);
        
        CString strText = _T("");
        strText.Format(_T("WORD:0x%04X"), wValue);
        pDC->TextOut(100, 50, strText);
        strText.Format(_T("low-order byte:0x%02X"), bLow);
        pDC->TextOut(100, 100, strText);
        strText.Format(_T("high-order byte:0x%02X"), bHigh);
        pDC->TextOut(100, 150, strText);
    }
    

    16.11如何将WORD类型组合成DWORD类型

    void CDemoView::OnDraw(CDC* pDC)
    {
        //将2个WORD类型数据组合成1个DWORD类型数据
        WORD wLow = 0x5500;
        WORD wHigh = 0xFFAA;
        DWORD dwValue = MAKELONG(wLow, wHigh);
        CString strText = _T("");
        strText.Format(_T("low-order word:0x%04X"), wLow);
        pDC->TextOut(100, 50, strText);
        strText.Format(_T("high-order word:0x%04X"), wHigh);
        pDC->TextOut(100, 100, strText);
        strText.Format(_T("DWORD:0x%08X"), dwValue);
        pDC->TextOut(100, 150, strText);
    }
    

    16.12 如何将BYTE类型转换成WORD类型

    void CDemoView::OnDraw(CDC* pDC)
    {
        //将2个BYTE类型数据组合成1个WORD类型数据
        BYTE bLow = 0x00;
        BYTE bHigh = 0xFF;
        WORD wValue = MAKEWORD(bLow, bHigh);
        CString strText = _T("");
        strText.Format(_T("low-order byte:0x%02X"), bLow);
        pDC->TextOut(100, 50, strText);
        strText.Format(_T("high-order byte:0x%02X"), bHigh);
        pDC->TextOut(100, 100, strText);
        strText.Format(_T("WORD:0x%04X"), wValue);
        pDC->TextOut(100, 150, strText);
    }
    

    16.13 如何将COLORREF类型转换成RGB分量

    void CDemoView::OnDraw(CDC* pDC)
    {
        COLORREF cr = RGB(255, 128, 0);
        //R分量
        BYTE RED = GetRValue(cr);
        //G分量
        BYTE GREEN = GetGValue(cr);
        //B分量
        BYTE BLUE = GetBValue(cr);
        CString strText = _T("");
        strText.Format(_T("COLORREF值:0x%08X"), cr);
        pDC->TextOut(100, 50, strText);
        strText.Format(_T("R分量:0x%02X"), RED);
        pDC->TextOut(100, 100, strText);
        strText.Format(_T("G分量:0x%02X"), GREEN);
        pDC->TextOut(100, 150, strText);
        strText.Format(_T("B分量:0x%02X"), BLUE);
        pDC->TextOut(100, 200, strText);
    }
    

    16.14 如何给VARIANT类型赋值

    void CDemoView::OnDraw(CDC* pDC)
    {
        VARIANT var;
        CString strText = _T("");
        //初始化VARIANT类型变量
        VariantInit(&var);
        
        //给VARIANT类型变量赋值
        var.vt = VT_I4;
        var.lVal = (long)100;
        strText.Format(_T("var = %d"), var.lVal);
        pDC->TextOut(100, 50, strText);
        //清除VARIANT类型变量
        VariantClear(&var);
        //给VARIANT类型变量赋值
        var.vt = VT_R4;
        var.fltVal = 1.23f;
        strText.Format(_T("var = %f"), var.fltVal);
        pDC->TextOut(100, 100, strText);
        //改变VARIANT类型变量数据类型
        VariantChangeType(&var, &var, 0, VT_R8);
        strText.Format(_T("var = %f"), var.dblVal);
        pDC->TextOut(100, 150, strText);
    }
    

    16.15 如何将BYTE转换成KB、MB和GB

    void CDemoDlg::OnTest() 
    {
        int nNum1 = GetDlgItemInt(IDC_NUM1);
        CString strNum2 = _T("");
        //转换成GB
        if (nNum1 > GB)
        {
            strNum2.Format(_T("%0.2fGB"), (double)nNum1 / GB);
        }
        //转换成MB
        else if (nNum1 > MB)
        {
            strNum2.Format(_T("%0.2fMB"), (double)nNum1 / MB);
        }
        //转换成KB
        else if (nNum1 > KB)
        {
            int n = nNum1 / KB;
            strNum2.Format(_T("%0.2fKB"), (double)nNum1 / KB);
        }
        else
        {
            strNum2.Format(_T("%dByte"), nNum1);
        }
        SetDlgItemText(IDC_NUM2, strNum2);
    }
    
  • 相关阅读:
    SourceTree使用教程(六)--回滚版本到某次提交
    SourceTree使用教程(四)---冲突解决
    Git 分支合并后回退的几种情况分析
    HTTP认证之基本认证——Basic(二) _
    C#3.0中自动属性和对象初始化器
    C# 3.0新特征之创建和初始化集合对象
    SQL 用多个条件进行排序;以及根据一个条件的多个值,进行排序
    如何修改 .NET Core Kestrel 下的端口
    存储过程
    mysql临时表用法分析【查询结果可存在临时表中】
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/2013326.html
Copyright © 2011-2022 走看看