多字节和宽字节互相转换

 1 char* wchar2char(const wchar_t* _wsrc, char* _dest, size_t _destLen)
 2 {
 3     int  iTextLen = WideCharToMultiByte(CP_ACP,
 4         0,
 5         _wsrc,
 6         -1,
 7         NULL,
 8         0,
 9         NULL,
10         NULL);
11
12     int maxLen = (size_t)iTextLen > _destLen ? _destLen : iTextLen;
13
14     ::WideCharToMultiByte(CP_ACP,
15         0,
16         _wsrc,
17         -1,
18         _dest,
19         maxLen,
20         NULL,
21         NULL);
22
23     return _dest;
24 }
25
26 wchar_t* char2wchar(const char* _src, wchar_t* _dest, size_t _destLen)
27 {
28     int unicodeLen = ::MultiByteToWideChar(CP_ACP,
29         0,
30         _src,
31         -1,
32         NULL,
33         NULL);
34
35     int maxLen = (size_t)unicodeLen > _destLen ? _destLen : unicodeLen;
36
37     ::MultiByteToWideChar(CP_ACP,
38         0,
39         _src,
40         -1,
41         (LPWSTR)_dest,
42         maxLen);
43
44     return _dest;
45
46 }
时间: 2024-10-09 11:41:23

多字节和宽字节互相转换的相关文章

windows下多字节和宽字节转换

先简单说下什么是多字节和宽字节. 多字节是指使用多个字节(1-3)表示一个字符.比如gbk使用英文占一个字节,中文占2个,这个就是多字节了.utf-8是使用1-3个字节表示字符.还有big5等等. 宽字节一般是固定使用2个字节表示一个字符,utf-16(一般就是指unicode). 1.MultiByteToWideChar 多字节转宽字节 2.WideCharToMultiByte 宽字节转多字节 3.和utf8有关的字符转换,代码页CodePage=CP_UTF8. 4.代码页CodePag

关于多字节、宽字节、WideCharToMultiByte和MultiByteToWideChar函数的详解

所谓的短字符,就是用8bit来表示的字符,典型的应用是ASCII码. 而宽字符,顾名思义,就是用16bit表示的字符,典型的有UNICODE. ********************************第一个就是宽字符到多字节字符转换函数,函数原型如下: int WideCharToMultiByte( UINT CodePage, DWORD dwFlags, LPCWSTR lpWideCharStr, int cchWideChar, LPSTR lpMultiByteStr, in

宽字节与多字节互相转换

这里需要用到两个函数:WideCharToMultiByte 与 MultiByteToWideChar 前者是从宽字节转换为多字节,后者则相反,是从多字节转换为宽字节.下面介绍下这两个函数: WideCharToMultiByte 该函数可以映射一个unicode字符串到一个多字节字符串,执行转换的代码页.接收转换字符串.允许额外的控制等操作. WideCharToMultiByte( _In_ UINT CodePage, // 指定执行转换的代码页,这个参数可以为系统已安装或有效的任何代码

那些年我们一起挖掘SQL注入 - 5.全局防护Bypass之宽字节注入

0x01 背景 首先我们了解下宽字节注入,宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而导致的注入漏洞.具体原理如下:1.正常情况下当GPC开启或使用addslashes函数过滤GET或POST提交的参数时,黑客使用的单引号 ' 就会被转义为: \':2.但如果存在宽字节注入,我们输入%df%27时首先经过上面提到的单引号转义变成了%df%5c%27(%5c是反斜杠\),之后在数据库查询前由于使用了GBK多

Mysql宽字节注入(转)

尽管现在呼吁所有的程序都使用unicode编码,所有的网站都使用utf-8编码,来一个统一的国际规范.但仍然有很多,包括国内及国外(特别是非英语国家)的一些cms,仍然使用着自己国家的一套编码,比如gbk,作为自己默认的编码类型.也有一些cms为了考虑老用户,所以出了gbk和utf-8两个版本. 我们就以gbk字符编码为示范,拉开帷幕.gbk是一种多字符编码,具体定义自行百度.但有一个地方尤其要注意: 通常来说,一个gbk编码汉字,占用2个字节.一个utf-8编码的汉字,占用3个字节.在php中

宽字节(宽字符)注入

字节注入也是在最近的项目中发现的问题,大家都知道%df' 被PHP转义(开启GPC.用addslashes函数,或者icov等),单引号被加上反斜杠\,变成了 %df\',其中\的十六进制是 %5C ,那么现在 %df\' =%df%5c%27,如果程序的默认字符集是GBK等宽字节字符集,则MYSQL用GBK的编码时,会认为 %df%5c 是一个宽字符,也就是縗',也就是说:%df\' = %df%5c%27=縗',有了单引号就好注入了.比如: $conn = mysql_connect("lo

【PHP代码审计】 那些年我们一起挖掘SQL注入 - 5.全局防护Bypass之宽字节注入

0x01 背景 首先我们了解下宽字节注入,宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而导致的注入漏洞.具体原理如下:1.正常情况下当GPC开启或使用addslashes函数过滤GET或POST提交的参数时,黑客使用的单引号 ‘ 就会被转义为: \’:2.但如果存在宽字节注入,我们输入%df%27时首先经过上面提到的单引号转义变成了%df%5c%27(%5c是反斜杠\),之后在数据库查询前由于使用了GBK多

1.5 宽字节注入

[转载]sql宽字节注入详解 尽管现在呼吁所有的程序都使用unicode编码,所有的网站都使用utf-8编码,来一个统一的国际规范.但仍然有很多,包括国内及国外(特别是非英语国家)的一些cms,仍然使用着自己国家的一套编码,比如gbk,作为自己默认的编码类型.也有一些cms为了考虑老用户,所以出了gbk和utf-8两个版本. 我们就以gbk字符编码为示范,拉开帷幕.gbk是一种多字符编码,具体定义自行百度.但有一个地方尤其要注意: 通常来说,一个gbk编码汉字,占用2个字节.一个utf-8编码的

MYSQL注入天书之宽字节注入

Background-7 宽字节注入 Less-32,33,34,35,36,37六关全部是针对'和\的过滤,所以我们放在一起来进行讨论. 对宽字节注入的同学应该对这几关的bypass方式应该比较了解.我们在此介绍一下宽字节注入的原理和基本用法. 原理:mysql在使用GBK编码的时候,会认为两个字符为一个汉字,例如%aa%5c就是一个汉字(前一个ascii码大于128才能到汉字的范围).我们在过滤 ' 的时候,往往利用的思路是将 ' 转换为 \' (转换的函数或者思路会在每一关遇到的时候介绍)