『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 301|回复: 8

[求助] 【已解决】关于中文转换成uint8_t的问题

[复制链接]

5

主题

90

帖子

1488

积分

金牌会员

Rank: 6Rank: 6

积分
1488
金钱
1398
HASS币
0
发表于 2024-9-25 08:09:55 | 显示全部楼层 |阅读模式
本帖最后由 liaozhihong 于 2024-10-6 13:20 编辑

各位大佬,我的意思是把中文转换为2个字节的uint8_t的代码,但是实现转出来是,一个中文占三个字节,不是我想要的,我想要的是这样的:
我要的是这种效果,比如说,您好  转换后是  C4FABAC3     如果是 1  转换后是  31

这个调试软件的界面

这个调试软件的界面


所有求助各位大佬,下面是我写的不对的函数,但是数字和字母是对的,
中文转换为uint8_t的问题,我的代码如下:

这个转出来出错

这个转出来出错


中文就是乱码,数字和字母是对的,这个函数研究好几天了,哈哈



回复

使用道具 举报

13

主题

572

帖子

3037

积分

论坛元老

HomeAssistant

Rank: 8Rank: 8

积分
3037
金钱
2460
HASS币
20
发表于 2024-9-25 08:18:53 | 显示全部楼层
编码问题,中文转GB2312是2个字节,转UTF8是3个字节
回复

使用道具 举报

5

主题

90

帖子

1488

积分

金牌会员

Rank: 6Rank: 6

积分
1488
金钱
1398
HASS币
0
 楼主| 发表于 2024-9-25 11:37:23 | 显示全部楼层
DDDear 发表于 2024-9-25 08:18
编码问题,中文转GB2312是2个字节,转UTF8是3个字节

大概知道是这个意思,代码不会写了,找了好久没有找到这种库,哈哈
回复

使用道具 举报

13

主题

572

帖子

3037

积分

论坛元老

HomeAssistant

Rank: 8Rank: 8

积分
3037
金钱
2460
HASS币
20
发表于 2024-9-25 17:27:46 | 显示全部楼层
liaozhihong 发表于 2024-9-25 11:37
大概知道是这个意思,代码不会写了,找了好久没有找到这种库,哈哈

屏幕显示用的utf8的?用什么发送的中文,发送端也用utf8格式发送就行吧
回复

使用道具 举报

5

主题

90

帖子

1488

积分

金牌会员

Rank: 6Rank: 6

积分
1488
金钱
1398
HASS币
0
 楼主| 发表于 2024-9-25 18:29:46 | 显示全部楼层
DDDear 发表于 2024-9-25 17:27
屏幕显示用的utf8的?用什么发送的中文,发送端也用utf8格式发送就行吧

发送端得uint8-t才能认识,不然显示为乱码,现在字母和数字没有问题,就是中文没有搞定
回复

使用道具 举报

1

主题

70

帖子

460

积分

中级会员

Rank: 3Rank: 3

积分
460
金钱
390
HASS币
0
发表于 2024-9-29 15:50:22 | 显示全部楼层
中文转utf8基本上都是3字节起步,你可以试试把中文用gb2312编码转换以下,
如果你的中文全部来自源码的字面量,还有个骚操作,把中文所在的源码文件改成GB3212
在此之前,你先硬编码几个字节的数据(比如D6 D0 CE C4,这是字符串“中文”),测试一下,是不是GB2312
回复

使用道具 举报

5

主题

90

帖子

1488

积分

金牌会员

Rank: 6Rank: 6

积分
1488
金钱
1398
HASS币
0
 楼主| 发表于 2024-10-4 20:46:11 | 显示全部楼层
二十四书生 发表于 2024-9-29 15:50
中文转utf8基本上都是3字节起步,你可以试试把中文用gb2312编码转换以下,
如果你的中文全部来自源码的字面 ...

确定是GB2312的,要在C++下写一个函数转换,就是这个函数不会写
哈哈
回复

使用道具 举报

20

主题

483

帖子

3150

积分

论坛元老

Rank: 8Rank: 8

积分
3150
金钱
2667
HASS币
8
发表于 2024-10-4 22:16:06 | 显示全部楼层
我有一个vb函数能够实现你的需求:
'双字节字符转换为ansi
Function AnsiCode(vstrIn As String) As String
    Dim i As Integer, strReturn As String, innerCode, ThisChr
    Dim Hight8 As Integer, Low8 As Integer
    strReturn = ""
    For i = 1 To Len(vstrIn)
        ThisChr = Mid(vstrIn, i, 1)
        If Abs(Asc(ThisChr)) < &HFF Then
            If Abs(Asc(ThisChr)) < &HF Then
                strReturn = strReturn & "0" & Hex(Asc(ThisChr))
            Else
                strReturn = strReturn & Hex(Asc(ThisChr)) & " "
            End If
        Else
            innerCode = Asc(ThisChr)
            If innerCode < 0 Then
                innerCode = innerCode + &H10000
            End If
            Hight8 = (innerCode And &HFF00) \ &HFF
            Low8 = innerCode And &HFF
            strReturn = strReturn & Hex(Hight8) & " " & Hex(Low8) & " "
        End If
    Next
    AnsiCode = strReturn
End Function
回复

使用道具 举报

5

主题

90

帖子

1488

积分

金牌会员

Rank: 6Rank: 6

积分
1488
金钱
1398
HASS币
0
 楼主| 发表于 2024-10-6 13:18:44 | 显示全部楼层
cjnt007 发表于 2024-10-4 22:16
我有一个vb函数能够实现你的需求:

我搞定了,感谢,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-21 23:47 , Processed in 1.358900 second(s), 33 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表