utf8转unicode
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <iconv.h>
#include <ctype.h> #define BYTE unsigned char /*
// C prototype : void StrToHex(BYTE *pbDest, BYTE *pbSrc, int nLen)
// parameter(s): [OUT] pbDest - 输出缓冲区
// [IN] pbSrc - 字符串
// [IN] nLen - 16进制数的字节数(字符串的长度/2)
// return value:
// remarks : 将字符串转化为16进制数
*/
void StrToHex(BYTE *pbDest, BYTE *pbSrc, int nLen)
{
char h1,h2;
BYTE s1,s2;
int i; for (i=; i<nLen; i++)
{
h1 = pbSrc[*i];
h2 = pbSrc[*i+]; s1 = toupper(h1) - 0x30;
if (s1 > )
s1 -= ; s2 = toupper(h2) - 0x30;
if (s2 > )
s2 -= ; pbDest[i] = s1* + s2;
}
} /*
// C prototype : void HexToStr(BYTE *pbDest, BYTE *pbSrc, int nLen)
// parameter(s): [OUT] pbDest - 存放目标字符串
// [IN] pbSrc - 输入16进制数的起始地址
// [IN] nLen - 16进制数的字节数
// return value:
// remarks : 将16进制数转化为字符串
*/
void HexToStr(BYTE *pbDest, BYTE *pbSrc, int nLen)
{
char ddl,ddh;
int i; for (i=; i<nLen; i++)
{
ddh = + pbSrc[i] / ;
ddl = + pbSrc[i] % ;
if (ddh > ) ddh = ddh + ;
if (ddl > ) ddl = ddl + ;
pbDest[i*] = ddh;
pbDest[i*+] = ddl;
} pbDest[nLen*] = '\0';
} int RS232_SendBuf(int comport_number,unsigned char *data_buf,int size)
{
char str[] = "";
HexToStr(str, data_buf, size);
printf("str == %s\n", str);
return ;
} int RS232_SxtBuf(int comport_number,int cardID,unsigned char cmd,unsigned char cmd_Sxt,unsigned char *buf,int size)
{
//unsigned char data_buf[size+8];
int i;
int satae = -;
unsigned char data_buf[]; switch(cmd)
{
case 0x50:
// data_buf = (unsigned char*)malloc((size+7)*sizeof(unsigned char));
data_buf[] = 0XA0;
data_buf[] = 0X90|((cardID>>)&0x0F);
data_buf[] =(unsigned char)(cardID&0x00ff);
data_buf[] = 0x50;
data_buf[] = size/;
data_buf[] = size%;
if(size != )
{
for(i = ;i<size;i++)
{
data_buf[+i] = buf[i];
}
}
else
{
data_buf[] = ;
}
data_buf[size+] = data_buf[]; for( i = ;i<size+;i++)
{
data_buf[size+] = data_buf[i]^data_buf[size+];
}
satae= RS232_SendBuf(comport_number,data_buf,size+);
break;
case 0xA5:
// data_buf = (unsigned char*)malloc((size+8)*sizeof(unsigned char));
data_buf[] = 0XA0;
data_buf[] = 0X90|((cardID>>)&0x0F);
data_buf[] =(unsigned char)(cardID&0x00ff);
data_buf[] = 0xA5;
data_buf[] = size/;
data_buf[] = size%;
if(size != )
{
for( i = ;i<size;i++)
{
data_buf[+i] = buf[i];
}
}
else
{
data_buf[] = ;
}
data_buf[size+] = data_buf[];
for( i = ;i<size+;i++)
{
data_buf[size+] = data_buf[i]^data_buf[size+];
}
satae= RS232_SendBuf(comport_number,data_buf,size+);
break;
case 0x58:
// data_buf = (unsigned char*)malloc((size+8)*sizeof(unsigned char));
data_buf[] = 0XA0;
data_buf[] = 0X90|((cardID>>)&0x0F);
data_buf[] =(unsigned char)(cardID&0x00ff);
data_buf[] = 0x58;
if(size == )
{
data_buf[] = ;
data_buf[] = ;
data_buf[] = data_buf[]^data_buf[]^data_buf[]^data_buf[];
satae = RS232_SendBuf(comport_number,data_buf,);
}
else
{
data_buf[] = ;
data_buf[] = ;
data_buf[] = 0xFF;
data_buf[] = data_buf[]^data_buf[]^data_buf[]^data_buf[]^data_buf[];
satae = RS232_SendBuf(comport_number,data_buf,);
}
break;
case 0x48:
data_buf[] = 0XA0;
data_buf[] = 0X90|((cardID>>)&0x0F);
data_buf[] =(unsigned char)(cardID&0x00ff);
data_buf[] = 0x48;
data_buf[] = ;
data_buf[] = ;
data_buf[] = cmd_Sxt;
data_buf[] = data_buf[]^data_buf[]^data_buf[]^data_buf[]^data_buf[];
satae = RS232_SendBuf(comport_number,data_buf,);
break;
case 0x49:
// data_buf = (unsigned char*)malloc((size+9)*sizeof(unsigned char));
data_buf[] = 0XA0;
data_buf[] = 0X90|((cardID>>)&0x0F);
data_buf[] =(unsigned char)(cardID&0x00ff);
data_buf[] = 0x49;
data_buf[] = (size+)/;
data_buf[] = (size+)%;
if(size != )
{
data_buf[] = cmd_Sxt;
for(i = ;i<size;i++)
{
data_buf[+i] = buf[i];
}
}
else
{
data_buf[] = ;
}
data_buf[size+] = data_buf[];
for(i = ;i<size+;i++)
{
data_buf[size+] = data_buf[i]^data_buf[size+];
}
satae = RS232_SendBuf(comport_number,data_buf,size+);
break;
case 0x44:
// data_buf = (unsigned char*)malloc((size+8)*sizeof(unsigned char));
data_buf[] = 0XA0;
data_buf[] = 0X90|((cardID>>)&0x0F);
data_buf[] =(unsigned char)(cardID&0x00ff);
data_buf[] = 0x44;
data_buf[] = size/;
data_buf[] = size%;
if(size != )
{
for(int i = ;i<size;i++)
{
data_buf[+i] = buf[i];
}
}
else
{
data_buf[] = ;
}
data_buf[size+] = data_buf[]; for( i = ;i<size+;i++)
{
data_buf[size+] = data_buf[i]^data_buf[size+];
}
satae = RS232_SendBuf(comport_number,data_buf,size+);
break;
case 0x51:
// data_buf = (unsigned char*)malloc((size+8)*sizeof(unsigned char));
data_buf[] = 0XA0;
data_buf[] = 0X90|((cardID>>)&0x0F);
data_buf[] =(unsigned char)(cardID&0x00ff);
data_buf[] = 0x51;
data_buf[] = size/;
data_buf[] = size%;
if(size != )
{
for( i = ;i<size;i++)
{
data_buf[+i] = buf[i];
}
}
else
{
data_buf[] = ;
}
data_buf[size+] = data_buf[]; for( i = ;i<size+;i++)
{
data_buf[size+] = data_buf[i]^data_buf[size+];
}
satae = RS232_SendBuf(comport_number,data_buf,size+); break;
case 0x52:
// data_buf = (unsigned char*)malloc((size+8)*sizeof(unsigned char));
data_buf[] = 0XA0;
data_buf[] = 0X90|((cardID>>)&0x0F);
data_buf[] =(unsigned char)(cardID&0x00ff);
data_buf[] = 0x52;
data_buf[] = size/;
data_buf[] = size%;
if(size != )
{
for( i = ;i<size;i++)
{
data_buf[+i] = buf[i];
}
}
else
{
data_buf[] = ;
}
data_buf[size+] = data_buf[]; for( i = ;i<size+;i++)
{
data_buf[size+] = data_buf[i]^data_buf[size+];
}
satae = RS232_SendBuf(comport_number,data_buf,size+); break;
default :
break;
}
//HAL_Delay(5);
// free(data_buf);
return satae;
} bool unicode_to_utf8 (char *inbuf, size_t *inlen, char *outbuf, size_t *outlen)
{
/* 目的编码, TRANSLIT:遇到无法转换的字符就找相近字符替换
* IGNORE :遇到无法转换字符跳过*/
char *encTo = "UTF-8//IGNORE";
/* 源编码 */
char *encFrom = "UNICODE"; /* 获得转换句柄
*@param encTo 目标编码方式
*@param encFrom 源编码方式
*
* */
iconv_t cd = iconv_open (encTo, encFrom);
if (cd == (iconv_t)-)
{
perror ("iconv_open");
} /* 需要转换的字符串 */
printf("inbuf=%s\n", inbuf); /* 打印需要转换的字符串的长度 */
printf("inlen=%d\n", *inlen); /* 由于iconv()函数会修改指针,所以要保存源指针 */
char *tmpin = inbuf;
char *tmpout = outbuf;
size_t insize = *inlen;
size_t outsize = *outlen; /* 进行转换
*@param cd iconv_open()产生的句柄
*@param srcstart 需要转换的字符串
*@param inlen 存放还有多少字符没有转换
*@param tempoutbuf 存放转换后的字符串
*@param outlen 存放转换后,tempoutbuf剩余的空间
*
* */
size_t ret = iconv (cd, &tmpin, inlen, &tmpout, outlen);
if (ret == -)
{
perror ("iconv");
} /* 存放转换后的字符串 */
printf("outbuf=%s\n", outbuf); //存放转换后outbuf剩余的空间
printf("outlen=%d\n", *outlen); int i = ; for (i=; i<(outsize- (*outlen)); i++)
{
//printf("%2c", outbuf[i]);
printf("%x\n", outbuf[i]);
} /* 关闭句柄 */
iconv_close (cd); return ;
} bool utf8_to_unicode(char *inbuf, size_t *inlen, char *outbuf, size_t *outlen)
{ /* 目的编码, TRANSLIT:遇到无法转换的字符就找相近字符替换
* IGNORE :遇到无法转换字符跳过*/
char *encTo = "UNICODE//IGNORE";
/* 源编码 */
char *encFrom = "UTF-8"; /* 获得转换句柄
*@param encTo 目标编码方式
*@param encFrom 源编码方式
*
* */
iconv_t cd = iconv_open (encTo, encFrom);
if (cd == (iconv_t)-)
{
perror ("iconv_open");
} /* 需要转换的字符串 */
printf("inbuf=%s\n", inbuf); /* 打印需要转换的字符串的长度 */
printf("inlen=%d\n", *inlen); /* 由于iconv()函数会修改指针,所以要保存源指针 */
char *tmpin = inbuf;
char *tmpout = outbuf;
size_t insize = *inlen;
size_t outsize = *outlen; /* 进行转换
*@param cd iconv_open()产生的句柄
*@param srcstart 需要转换的字符串
*@param inlen 存放还有多少字符没有转换
*@param tempoutbuf 存放转换后的字符串
*@param outlen 存放转换后,tempoutbuf剩余的空间
*
* */
size_t ret = iconv(cd, &tmpin, inlen, &tmpout, outlen);
if (ret == -)
{
perror ("iconv");
} /* 存放转换后的字符串 */
printf("outbuf=%s\n", outbuf); //存放转换后outbuf剩余的空间
printf("outlen=%d\n", *outlen); int i = ; for (i=; i<(outsize- (*outlen)); i++)
{
//printf("%2c", outbuf[i]);
printf("%x\n", outbuf[i]);
} /* 关闭句柄 */
iconv_close (cd); return ;
} int main()
{
char *unicode_buf = NULL;
size_t num = ; /* 需要转换的字符串 */
//char inbuf[1024] = "张忠旺";
char *text = "张忠旺"; char inbuf[] = {};
strcpy(inbuf, text);
size_t inlen = strlen(inbuf); /* 存放转换后的字符串 */
char outbuf[] = {};
size_t outlen = ; utf8_to_unicode(inbuf, &inlen, outbuf, &outlen); printf("out_len = %d\n", outlen ); RS232_SxtBuf(, , 0x50, , outbuf + , - outlen - );
return ;
}

utf8转unicode的更多相关文章
- UTF-8和Unicode
What's the difference between unicode and utf8? up vote 103 down vote favorite 49 Is it true that un ...
- 【GoLang】GoLang UTF8 与 Unicode
结论: 通用的UTF8编码可是Ken Thompson和Rob Pike共同发明的, 他们都是Go的作者. Go中rune对应unicode的码点, string只是UTF8编码.len(" ...
- [转]unicode,ansi,utf-8,unicode big endian的故事
unicode,ansi,utf-8,unicode big endian的故事很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们看到8个开关状态是好的 ...
- paip.utf-8,unicode编码的本质输出unicode文件原理 python
paip.utf-8,unicode编码的本质输出unicode文件原理 python #别的语言,java php都是unicode,走十python不一样. #enddef #t ...
- PHP UTF-8和Unicode编号互转
PHP UTF-8和Unicode编号互转 /** * utf-8 转unicode * * @param string $name * @return string */ function utf8 ...
- 跨平台utf8转unicode研究实现(2)
最近在用VC++开发一个小工具,平时用惯了.NET,用起VC++最郁闷的就是字符串处理.当然最最让人难于琢磨的就是字符集,编码之间的转换.通过这几天的研究,终于明白了Unicode和UTF-8之间编码 ...
- 浅谈编码Base64、Hex、UTF-8、Unicode、GBK等
网络上大多精彩的回答,该随笔用作自我总结: 首先计算机只认得二进制,0和1,所以我们现在看到的字都是经过二进制数据编码后的:计算机能针对0和1的组合做很多事情,这些规则都是人定义的:然后有了字节的概念 ...
- linux下php中文UTF-8转换Unicode方法和注意事项
先说下遇到问题:1.php没有内置unicode_ecode函数可以直接使用 2.网上很多资料都是用$str = iconv($encoding, 'UCS-2', $str); window下转换出 ...
- utf-8和Unicode的区别
链接 utf-8和Unicode到底有什么区别?是存储方式不同?编码方式不同?它们看起来似乎很相似,但是实际上他们并不是同一个层次的概念 要想先讲清楚他们的区别,首先应该讲讲Unicode的来由. 众 ...
- Python中GBK, UTF-8和Unicode的编码问题
编码问题,一直是使用python2时的一块心病.几乎所有的控制台输入输出.IO操作和HTTP操作都会涉及如下的编码问题: UnicodeDecodeError:‘ascii’codec can’t d ...
随机推荐
- C++ 静态常量
#include<iostream> #include<stdexcept> #include <map> using namespace std; class n ...
- Rational Rose 2003 下载、破解及安装方法(图文)
方法一: 1. 安装Rational Rose2003时,在需选择安装项的时候,只选择Rational Rose EnterPrise Edition即可,不需选择其他项,之后选择“DeskTop I ...
- ZOJ2314 Reactor Cooling(有上下界的网络流)
The terrorist group leaded by a well known international terrorist Ben Bladen is buliding a nuclear ...
- C#进阶之路(一):委托
一.什么是委托 简单说它就是一个能把方法当参数传递的对象,而且还知道怎么调用这个方法,同时也是粒度更小的“接口”(约束了指向方法的签名). 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方 ...
- Git在不同环境换行符设置
首先我们在eclipse查看两个环境文件的换行符区别: 产生背景 关于“回车”(carriage return)和“换行”(line feed)这两个概念的来历和区别.在计算机还没有出现之前,有一种叫 ...
- mysql之 Innobackupex(全备+增量)备份恢复
MySQL的热备(物理备份)可以采取全备加增量备份的方式来减轻数据库I/O压力及系统资源的占用.增量备份主要是以全备或增量备份为基础,备份那些变更过的页面.其备份的原理是基于一个不断增长的LSN序列, ...
- 蓝桥杯 算法训练 ALGO-117 友好数
算法训练 友好数 时间限制:1.0s 内存限制:256.0MB 问题描述 有两个整数,如果每个整数的约数和(除了它本身以外)等于对方,我们就称这对数是友好的.例如: 9的约数和有:1+3=4 ...
- 机器学习:PCA(基础理解、降维理解)
PCA(Principal Component Analysis) 一.指导思想 降维是实现数据优化的手段,主成分分析(PCA)是实现降维的手段: 降维是在训练算法模型前对数据集进行处理,会丢失信息. ...
- 第八课 go的条件语句
1 if ... else package main import "fmt" func main() { flag:= { fmt.Println("flag > ...
- 使用like查询text类型字段
使用like查询text类型字段 public bool Exists(GetReadType GRT, ClientMessageGetRead TypeID, string MessageID, ...