资源简介
纯C语音进行各种格式编码直接的转换。
int gbk_to_unicode
int unicode_to_gbk
int unicode_to_utf8
int utf8_to_unicode
代码片段和文件信息
#include “stdafx.h“
#include “string_conv.h“
#include “gbk_to_unicode.h“
#include “unicode_to_gbk.h“
int dprintf(char *format ... )
{
#if 0
char buf[1024];
va_list marker;
int n;
va_start(marker format); // 开始分析字符串
n = vsprintf(buf format marker); // 格式化输出字符串
printf(“%s“ buf);
va_end(marker); // 结束分析
return 0;
#else
return 0;
#endif
}
/*-----------------+-------------------------+------------------------
| endian = 1 大端 |
| endian = 0 小端 |
-------------------+-------------------------+-----------------------*/
int gbk_to_unicode(unsigned char *gbk_buf unsigned short *unicode_buf int max_unicode_buf_size int endian)
{
unsigned short word;
unsigned char *gbk_ptr = gbk_buf;
unsigned short *uni_ptr = unicode_buf;
unsigned int uni_ind = 0 gbk_ind = 0 uni_num = 0;
unsigned char ch;
int word_pos;
if( !gbk_buf || !unicode_buf )
return -1;
while(1)
{
ch = *(gbk_ptr + gbk_ind);
if(ch == 0x00)
break;
if( ch > 0x80 )
{
//chinese
//word = *p *256 + *(p+1);
if(endian == 1) //大端
{
word = *(gbk_ptr + gbk_ind);
word <<= 8;
gbk_ind++;
word += *(gbk_ptr + gbk_ind);
gbk_ind++;
}
else
{
word = *(gbk_ptr + gbk_ind + 1);
word <<= 8;
word += *(gbk_ptr + gbk_ind);
gbk_ind += 2;
}
//printf(“word: 0x%x\n“ word);
word_pos = word - g_gbk_first_code;
if(word >= g_gbk_first_code && word <= g_gbk_last_code && (word_pos < g_gbk_to_unicode_buf_size))
{
//*p_out = g_gbk_to_unicode_buf[word_pos];
//*p_out ++;
//n++;
*(uni_ptr + uni_ind) = g_gbk_to_unicode_buf[word_pos];
uni_ind++;
uni_num++;
}
}
else
{
//for ASCII
//*p_out = (unsigned short)*p;
//*p_out ++;
//n++;
gbk_ind++;
//*(uni_ptr + uni_ind) = g_gbk_to_unicode_buf[word_pos];
*(uni_ptr + uni_ind) = ch;
uni_ind++;
uni_num++;
}
if(uni_num > max_unicode_buf_size - 1)
break;
}
return uni_num;
}
int unicode_to_gbk(unsigned short *unicode_buf unsigned char *gbk_buf int max_gbk_buf_size int endian)
{
unsigned short word;
unsigned short gbk_word;
unsigned char ch;
unsigned char *gbk_ptr = gbk_buf;
unsigned short *uni_ptr = unicode_buf;
unsigned int uni_ind = 0 gbk_ind = 0 gbk_num = 0;
int word_pos;
if( !gbk_buf || !unicode_buf )
return -1;
while(1)
{
word = *(uni_ptr + uni_ind);
uni_ind++;
if(word == 0x0000) //字符串结束符
break;
//dprintf(“[0]word: 0x%x\n“ word);
if(endian == 1) //大端
{
//高低位交换
ch = (unsigned char)word;
word = word >> 8;
word += ch << 8;
}
//dprintf(“
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 287902 2010-07-22 11:51 conver code\gbk_to_unicode.h
文件 7318 2010-07-22 14:55 conver code\string_conv.cpp
文件 929 2010-07-22 14:52 conver code\string_conv.h
文件 209545 2010-07-22 14:48 conver code\unicode_to_gbk.h
目录 0 2010-07-22 14:56 conver code
----------- --------- ---------- ----- ----
505694 5
- 上一篇:数据结构与算法 C语言描述课后习题答案
- 下一篇:下行法求故障树最小割集
相关资源
- STC8G1K08A红外遥控点灯
- C语言的嵌入式汇编基本使用.docx(2页
- stm32f103c8t6开发板原理图+pcb
- Arduino 敲琴MIDI电子琴 程序报告.docx
- CAN实验
- LCD驱动芯片ST7701SI SPI接口底层驱动配
- 显示屏操作(stm32f103c8t6(SAN))
- USB CAN Tool 源代码(LabVIEW 2011环境)
- Proteus 8.6仿真STM32F103C6
- atmega128 串口通讯(RS485.c)
- C语言嵌入式Modbus协议栈,支持主站和
- stm32 +w5500 裸机 远程升级 自动dns pi
- 永磁同步电机的FOC控制算法
- arduino I2C设备扫描并串口返回地址(
- Proteus仿真:LCD液晶屏显示.rar
- STM32 PCB封装库 全系列 全网不好找
- 基于STM32F407的W5500 tcpserver(官网例程
- 步进电机调速原理.c
- tm1650+stm32f103源码(board_tm1650.c)
- 颜色识别形状识别STM103嵌入式代码
- 基于STM32的音频信号采样与FFT分析
- 汽车电子编程规范(Unlock-MISRA C 2012)
- cheat engine 7.2源码
- 基于STM32F103C8T6主控板使用BH1750检测光
- cubeMX设计实现stm32f407上的CAN及485的通
- stm32 BootLoader程序(main.c)
- 新编Windows API参考大全.doc
- CrySearch内存搜索器源码
- com组件(共907页)
- WINcc与海康威视摄像头
评论
共有 条评论