如何将读取的中文转为十六进制数啊?

hotkarriver 2014-05-30 05:09:16
我想从一个文本文件中读取里面的中文字符,然后将每个中文转成它的unicode码,大神指导一下吧!!!
...全文
180 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hotkarriver 2014-06-03
  • 打赏
  • 举报
回复
引用 1 楼 hzhxxx 的回复:
char buff[1024]; char * s = "变成十六进制"; for(size_t i = 0;i < strlen(s);++i) { sprintf(buff + 2 * i,"%02x",s[i]); } printf("%s\n",buff);
用%02x确实能将字符串的二进制编码打印出来,我试了下,读取从windows下保存的unicode编码的文件,读出来的就是每个字对应的unicode码。但是读取在linux下用C语言保存的文件,读出来的编码就不是unicode码,大神,我要怎么把读出来的转成unicode呀?或者用C语言保存的时候能不能保存成unicode编码格式啊?
赵4老师 2014-06-03
  • 打赏
  • 举报
回复
UTF8转Unicode,仅供参考,尽管是VB6:
Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByRef lpMultiByteStr As Any, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
Private Declare Function WideCharToMultiByte Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByRef lpMultiByteStr As Any, ByVal cchMultiByte As Long, ByVal lpDefaultChar As Long, ByVal lpUsedDefaultChar As Long) As Long
'常用的代码页:
const cpUTF8   =65001
const cpGB2312 =  936
const cpGB18030=54936
const cpUTF7   =65000
Function MultiByteToUTF16(UTF8() As Byte, CodePage As Long) As String
    Dim bufSize As Long
    bufSize = MultiByteToWideChar(CodePage, 0&, UTF8(0), UBound(UTF8) + 1, 0, 0)
    MultiByteToUTF16 = Space(bufSize)
    MultiByteToWideChar CodePage, 0&, UTF8(0), UBound(UTF8) + 1, StrPtr(MultiByteToUTF16), bufSize
End Function

Function UTF16ToMultiByte(UTF16 As String, CodePage As Long) As Byte()
    Dim bufSize As Long
    Dim arr() As Byte
    bufSize = WideCharToMultiByte(CodePage, 0&, StrPtr(UTF16), Len(UTF16), 0, 0, 0, 0)
    ReDim arr(bufSize - 1)
    WideCharToMultiByte CodePage, 0&, StrPtr(UTF16), Len(UTF16), arr(0), bufSize, 0, 0
    UTF16ToMultiByte = arr
End Function

Private Sub Command1_Click()
    MsgBox MultiByteToUTF16(UTF16ToMultiByte("ab中,c", cpUTF8), cpUTF8)
End Sub

清竹小雨 2014-05-30
  • 打赏
  • 举报
回复
中文占两字节,首先判断第一字节最高位是否为0,零的话,就只读一字节(ASCII),如果不是,就按两字节读取,读的两个字节根据字符编码集去解释是什么字。
hzhxxx 2014-05-30
  • 打赏
  • 举报
回复
晕,说得不对啊。 转编码,应该是用 使用iconv函数族 #include <iconv.h> size_t iconv(iconv_t cd, char **restrict inbuf, size_t *restrict inbytesleft, char **restrict outbuf, size_t *restrict outbytesleft);
hzhxxx 2014-05-30
  • 打赏
  • 举报
回复
char buff[1024]; char * s = "变成十六进制"; for(size_t i = 0;i < strlen(s);++i) { sprintf(buff + 2 * i,"%02x",s[i]); } printf("%s\n",buff);

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧