socket通讯中需要用到的一些数据类型转换的方法

     在上次做的项目中,使用到了Socket进行数据通讯,其中用到了一些数据类型进行转换的方法,现在

贴出来给大家分享下,希望大家多给些意见,能进一步帮忙完善更好了,先谢过了。

 

 /// <summary>
        /// 整数转为Byte【】
        /// 低位在前,高位在后
        /// </summary>
        /// <param name="r">要转换的整数</param>
        /// <param name="digits">Byte位数</param>
        /// <returns></returns>
        private static byte[] GetBytesFromInt(int r, int digits)
        {
            byte[] bt = new byte[digits];
            int j=8;
            for (int k = 0; k < digits; k++)
            {
                j=8*k;
                bt[k]=(byte)(r>>j);
            }
            return bt;
        }
     
        /// <summary>
        /// 将字符转换为Byte数组
        /// </summary>
        /// <param name="s"></param>
        /// <returns></returns>
        private static byte[] GetBytesFromStr(string s)
        {
            byte[] bt = Encoding.UTF8.GetBytes(s);
            return bt;
        }
        /// <summary>
        /// 计算字符传编码时的字节长度
        /// </summary>
        /// <param name="s"></param>
        /// <returns></returns>
        private static int GetBytesLengthFromStr(string s)
        {
            int iLength = Encoding.UTF8.GetByteCount(s);
            return iLength;
        }

        /// <summary>
        /// 将Byte数组转化为Int16
        /// </summary>
        /// <param name="bt"></param>
        /// <param name="index"></param>
        /// <returns></returns>
        private static Int16 GetInt16FromBytes(byte[] bt)
        {
            Int16 s = BitConverter.ToInt16(bt,0);
            return s;
        }

        /// <summary>
        /// 将Byte数组转化为Int32
        /// </summary>
        /// <param name="bt"></param>
        /// <param name="index"></param>
        /// <returns></returns>
        private static int GetIntFromBytes(byte[] bt)
        {
            int s = BitConverter.ToInt32(bt, 0);
            return s;
        }

        /// <summary>
        /// 将Byte数组转化为String
        /// </summary>
        /// <param name="bt"></param>
        /// <param name="index"></param>
        /// <returns></returns>
        private static string GetStrFromBytes(byte[] bt)
        {
            string s = BitConverter.ToString(bt, 0);
            return s;
        }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Qt使用socket进行通讯时,可以使用多线程来同时接收两路数据。具体实现方法如下: 1.创建两个QTcpSocket对象,分别与两个服务器建立连接。 2.为每个QTcpSocket对象创建一个QThread线程对象。 3.将每个QTcpSocket对象移动到对应的线程,以便在单独的线程接收数据。 4.在线程对象,通过重载run()函数实现数据的接收和处理。 下面是一个简单的示例代码,演示如何同时接收两路数据: ```cpp // 创建两个QTcpSocket对象 QTcpSocket *socket1 = new QTcpSocket(); QTcpSocket *socket2 = new QTcpSocket(); // 创建两个线程对象 QThread *thread1 = new QThread(); QThread *thread2 = new QThread(); // 将socket1移动到线程1 socket1->moveToThread(thread1); // 将socket2移动到线程2 socket2->moveToThread(thread2); // 连接socket1的readyRead()信号到线程1的处理函数 connect(socket1, SIGNAL(readyRead()), thread1, SLOT(onReadyRead())); // 连接socket2的readyRead()信号到线程2的处理函数 connect(socket2, SIGNAL(readyRead()), thread2, SLOT(onReadyRead())); // 启动线程1和线程2 thread1->start(); thread2->start(); ``` 在线程对象,可以通过重载run()函数来接收数据和处理数据。下面是一个示例代码,演示如何在线程接收数据: ```cpp class MyThread : public QThread { Q_OBJECT public: void run() override { while (true) { // 从socket对象读取数据 QByteArray data = socket->readAll(); // 处理数据 process(data); } } public slots: void onReadyRead() { // 重新启动线程 start(); } private: QTcpSocket *socket; }; ``` 在onReadyRead()槽函数,重新启动线程,以便在数据到达时立即接收数据。这样,就可以在两个线程同时接收两路数据了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值