TCHAR和CHAR类型的互转,string 转lpcwstr

news/2024/7/8 7:11:09

https://www.cnblogs.com/yuguangyuan/p/5955959.html

没有定义UNICODE,所以它里面的字符串就是简单用" "就行了,创建工程的时候包含了UNICODE定义,就必须对TCHAR和char进行转换。

void TcharToChar(const TCHAR * tchar, char * _char)
{
    int iLength;
    //获取字节长度   
    iLength = WideCharToMultiByte(CP_ACP, 0, tchar, -1, NULL, 0, NULL, NULL);
    //将tchar值赋给_char    
    WideCharToMultiByte(CP_ACP, 0, tchar, -1, _char, iLength, NULL, NULL);
}

void CharToTchar(const char * _char, TCHAR * tchar)
{
    int iLength;
    iLength = MultiByteToWideChar(CP_ACP, 0, _char, strlen(_char) + 1, NULL, 0);
    MultiByteToWideChar(CP_ACP, 0, _char, strlen(_char) + 1, tchar, iLength);
}

表明 TCHAR 与 WCHAR 属同一类型
char szA[100];                    // ANSI string buffer
WCHAR szW[100];            // Unicode string buffer
// Normal sprintf:all strings are ANSI
sprintf(szA, "%s","ANSI Str");
// Converts Unicode string to ANSI
sprintf(szA,"%S",L"Unicode Str");
// Normal swprintf:all strings are Unicode
swprintf(szW,L"%s",L"Unicode Str");
// Converts ANSI string to Unicode
swprintf(szW,L"%S", "ANSI Str");
注意:大写S 和小写s 的使用

 string 转lpcwstr 

    LPCWSTR stringToLPCWSTR(std::string orig)
    {
        wchar_t *wcstring = 0;
        try{
            size_t origsize = orig.length() + 1;
            const size_t newsize = 100;size_t convertedChars = 0;
            if (orig == ""){wcstring = (wchar_t *)malloc(0);
                mbstowcs_s(&convertedChars, wcstring, origsize, orig.c_str(), _TRUNCATE);
            }
            else{
                wcstring = (wchar_t *)malloc(sizeof(wchar_t)*(orig.length() - 1));
                mbstowcs_s(&convertedChars, wcstring, origsize, orig.c_str(), _TRUNCATE);
            }
        }
        catch (std::exception e)
        {}
        return wcstring;
    }

 

std::string to_s(LPCWSTR ws)
{
    DWORD length = WideCharToMultiByte(CP_OEMCP, NULL, ws, -1, NULL, 0, NULL, FALSE);
    std::string result(length, 0);
    WideCharToMultiByte(CP_OEMCP, NULL, ws, -1, &result[0], length, NULL, FALSE);
    result.erase(result.size() - 1, 1);
    return result;
}

std::wstring to_ws(LPCSTR str)
{
    int length = MultiByteToWideChar(GetACP(), 0, str, -1, NULL, 0);
    std::wstring result(length, 0);
    MultiByteToWideChar(GetACP(), 0, str, -1, &result[0], length);
    return result;
}

 

转载于:https://www.cnblogs.com/xiangtingshen/p/10723546.html


http://www.niftyadmin.cn/n/3142258.html

相关文章

java gui 计算器_利用Java GUI 实现简单的计算器

importjava.awt.EventQueue;importjavax.swing.JFrame;importjavax.swing.JButton;importjavax.swing.JTextField;importjava.awt.event.ActionListener;importjava.awt.event.ActionEvent;/*** GUI计算器*authorAdministrator**/public classCalculater {static float sum 0f;…

我的PMP备考历程

上下寻觅,偶遇PMP从事项目管理相关工作近八年,期间零星学习了一些项目管理的相关知识,在项目管理实际工作中,发现已有的项目管理知识越来越不能满足实际工作的需求,感觉有些力不从心,于是萌生了系统学习项目…

【项目执行】项目中问题

多部门,多人员参与 1.确定项目总负责人,及时协调各方任务和人力2.晨会沟通当天任务,同步项目进展(15min,晨会不做小组讨论)3.日报同步项目进度和风险,已知风险确定解决方案或解决时间(下班前) 前…

java rmi 实例_Java Rmi 简单实例

1.rmi-demo-api 首先定义基础接口package com.weizhi.hessian.demo.api;import java.rmi.Remote;import java.rmi.RemoteException;/*** ClassName IRpcService* Description TODO* Author weizhi2018* Date 2013-9-27 下午02:58:46**/public interface IRpcService extends R…

Intellij中request等对象无法解析

问题描述 刚刚从eclipse转过来IDEA开发Java web,发现创建项目之后跟eclipse不一样,jsp内置对象统统都不能代码提示或者自动补全。甚至出现内置对象 Cannot resolve method ‘print(int)报错 原理 这是没有解决依赖包的原因,所以解决方法就是把…

java 线性表排序_java线性表排序示例分享

大家可以先看一下这个静态方法public static void sort(List list, Comparator super T> c)1.先定义一个模型:package model;/*** User.java** author 梁WP 2014年3月3日*/public class User{private String userName;private int userAge;public User(){}public…

NIO原理及案例使用

什么是NIO Java提供了一个叫作NIO(New I/O)的第二个I/O系统,NIO提供了与标准I/O API不同的I/O处理方式。它是Java用来替代传统I/O API(自Java 1.4以来)。 它支持面向缓冲的,基于通道的I/O操作方法。 随着JDK 7的推出,NIO系统得到了扩展&#…

基本数据类型—字符串

字符串的定义与创建 字符串是一个有序的字符的集合,用于存储和表示基本的文本信息, 或 或 中间包含的内容称之为字符串 创建: s Hello,Eva!How are you?字符串的特性与常用操作 特性: 1.按照从左到右的顺序定义字符集…