• 5800阅读
  • 7回复

[提问]谁能帮忙把字符用QT转换一下 [复制链接]

上一主题 下一主题
离线纵刀少年
 

只看楼主 倒序阅读 楼主  发表于: 2014-10-20
C#程序
public static String HEAD = "" + (char)0x11 + (char)0x12;
public static String FOOT = "" + (char)0x13 + (char)0x14;
public static String CONN_TEST = HEAD + C_TEST + FOOT;
dataSocket.Send(Constant.CONN_TEST);

现在要转成QT的,在TCPSOCK上WRITE
QByteArray buff;
buff.append(HEAD).append(C_TEST).append(FOOT).
char *mm = buff.data();
tcpsocket.write(mm);
我试着这样,但好像没得到想要的效果。
离线dbzhang800

只看该作者 1楼 发表于: 2014-10-20
为什么不直接 tcpsocket.write(buff);
离线纵刀少年

只看该作者 2楼 发表于: 2014-10-20
回 dbzhang800 的帖子
dbzhang800:为什么不直接 tcpsocket.write(buff); (2014-10-20 11:47) 

QString HEAD,FOOT;
HEAD.append((char)0x11).append((char)0x12);
FOOT.append((char)0x12).append((char)0x13);
那应该不是问题重点,对HEAD和FOOT我在QT中是这样定义的,不知道效果是否和C#的源程序一样,0x11和0x12对应ascii码都不是可以显示的字符,怕QString会将其处理掉
离线纵刀少年

只看该作者 3楼 发表于: 2014-10-20
    QString s;
    string sh=""+(char)0x11+(char)0x12;
    string sf=""+(char)0x13+(char)0x14;
    s=s.fromStdString(sh+C_TEST+sf);
    qDebug()<<s.size();
    qDebug()<<s;

最诡异的是,它输出这样的结果。
19
"ow.cpp:11@ow.cpp:12"  //应该是我源程序文件名。
离线dbzhang800

只看该作者 4楼 发表于: 2014-10-20
回 纵刀少年 的帖子
纵刀少年:QString HEAD,FOOT;
HEAD.append((char)0x11).append((char)0x12);
FOOT.append((char)0x12).append((char)0x13);
那应该不是问题重点,对HEAD和FOOT我在QT中是这样定义的,不知道效果是否和C#的源程序一样,0x11和0x12对应ascii码都不是可以显示的字符,怕QString会将其处理掉 (2014-10-20 11:52) 

QString 内部是utf16,不会处理掉你的字符。
离线dbzhang800

只看该作者 5楼 发表于: 2014-10-20
回 纵刀少年 的帖子
纵刀少年:    QString s;
    string sh=""+(char)0x11+(char)0x12;
    string sf=""+(char)0x13+(char)0x14;
    s=s.fromStdString(sh+C_TEST+sf);
    qDeb .. (2014-10-20 12:07) 

你至少应该告诉别人:
理论上,它的输出是什么?而实际上,它输出的又是什么?

另外,里面包含了非可见字符,就不要用qDebug() 直接输出了。
至少你要稍微转换一下吧?比如qDebug()<<s.toLatin1().toHex() 或 qDebug()<<s.toUtf8().toHex()

涉及到字符串 QString  和字节流 (QByteArray/char*/std::string) 的问题,其实就是一个编解码的问题,概念清晰是主要的,难度基本谈不上。
离线纵刀少年

只看该作者 6楼 发表于: 2014-10-20
回 dbzhang800 的帖子
dbzhang800:你至少应该告诉别人:
理论上,它的输出是什么?而实际上,它输出的又是什么?
另外,里面包含了非可见字符,就不要用qDebug() 直接输出了。
....... (2014-10-20 12:25) 

就是首楼位置那,我想用TCPSOCKET按一个协议发送一个帧的数据包。我参照着源码的C#程序做,我觉得发送的东西是一样的了,但sever那边就是不认我发出的数据。
我按你说的用HEX看其内容应该是正确的。我在SERVER那边也试着用messagebox查看接收到的数据,可以显示的字符串一样。似乎是文件头尾HEAD和FOOT有问题.
离线dbzhang800

只看该作者 7楼 发表于: 2014-10-21
回 纵刀少年 的帖子
纵刀少年:就是首楼位置那,我想用TCPSOCKET按一个协议发送一个帧的数据包。我参照着源码的C#程序做,我觉得发送的东西是一样的了,但sever那边就是不认我发出的数据。
我按你说的用HEX看其内容应该是正确的。我在SERVER那边也试着用messagebox查看接收到的数据,可以显示的字符串一样。似 .. (2014-10-20 13:25) 

你应该自己简化问题,到底是 构造的字符串或字节流有问题,还是正确的字节流通过TCP发生时出了问题。

一个一个验证,应该容易找到问题
快速回复
限100 字节
 
上一个 下一个