Qt 關于QString和std::string數據截斷的問題- 遇到\0或者0x00如何處理?

Qt 關于QString和std::string數據截斷的問題- 遇到\0或者0x00如何處理?

  • 引言
  • 一、解決方案
  • 二、使用QByteArray注意事項

引言

在Qt開發中,使用QString或std::string獲取、發送字符串時,遇到\0(空字符)或者0x00(十六進制表示)可能導致數據截斷,因為其會將以上數據視為字符串終止符,導致后續數據被丟棄。

C 語言中字符串的結束標志\0:https://zhuanlan.zhihu.com/p/720768702
深入解析 C++ 中字符串的結尾標志 \0:https://blog.csdn.net/zy4213/article/details/141830309

一、解決方案

    1. 可以轉換為其他類型,比如QByteArray,可以正常處理\00x00
    1. 調用或寫入設備時明確長度,比如使用QIODevice的write函數時,不要只傳遞數據,還要傳入其Size (如下所示,推薦使用第一個和第三個函數):
qint64 write(const char *data, qint64 len);       // 推薦使用
qint64 write(const char *data);                   // 不建議使用此函數
inline qint64 write(const QByteArray &data)       // 和第一個一樣
{ return write(data.constData(), data.size()); }

傳輸文件數據中存在多個 \0怎么避免截斷:https://blog.csdn.net/qq_49502822/article/details/145550671
Qt中執行write(data.constdata),在數組中“0x00”值處出現斷針【已解決】:https://blog.csdn.net/Taylor_0522/article/details/101343941

二、使用QByteArray注意事項

  • QByteArray的互轉需要注意截斷

QbyteArray 包含 0x00 轉換為 QString 時數據被截斷:https://blog.csdn.net/wrs000001/article/details/125168561

  • 調用函數傳參也要注意,比如以下例子,函數參數為QString,但傳入的是QByteArray (不會報錯,會自動轉換),QByteArray里包含0x00,自動轉為QString就會產生數據丟失。
void print_cs(QString s){qDebug() << s.toLatin1().toHex();
}
    QByteArray cs;QDataStream ds(&cs, QIODevice::WriteOnly);ds << uint8_t(0x11);ds << uint8_t(0x22);ds << uint8_t(0x00);ds << uint8_t(0x33);qDebug() << cs.toHex();print_cs(cs);
  • 輸出結果如下所示:
    在這里插入圖片描述

QString和QByteArray:https://blog.csdn.net/imred/article/details/104256932

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/919326.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/919326.shtml
英文地址,請注明出處:http://en.pswp.cn/news/919326.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring Cloud LoadBalancer 最佳實踐

Ribbon 曾經是 Spring Cloud 家族默認的客戶端負載均衡工具&#xff0c;而 Spring Cloud LoadBalancer (SCLB) 是官方替換 Ribbon 的新實現。表面上它們都解決 “服務調用時選哪個實例” 的問題&#xff0c;但在理念、架構和生態上差異不小。一、Ribbon vs SCLB1. 定位和生態…

【STM32】SPI 與 Flash 筆記

1?? SPI&#xff08;Serial Peripheral Interface&#xff0c;串行外設接口&#xff09;英文解釋&#xff1a; Serial&#xff1a;串行Peripheral&#xff1a;外設Interface&#xff1a;接口用途&#xff1a;MCU 與外部設備&#xff08;Flash、傳感器等&#xff09;高速數據通…

抽象工廠設計模式 Abstract Factory

抽象工廠抽象工廠設計模式是一種創建模式&#xff0c;它提供了一個用于創建相關或從屬對象族的接口&#xff0c;而無需指定其具體類。 它在以下情況下特別有用&#xff1a; 您需要創建必須一起使用并且是一致系列的一部分的對象&#xff08;例如&#xff0c;按鈕、復選框和菜單…

WSL 下的虛擬網卡配置

第一部分&#xff1a;Windows 虛擬網卡創建指南 1. 原理 在 Windows 里&#xff0c;“虛擬網卡”本質是由網絡驅動在系統網絡棧中創建的一個 軟件網卡接口。它的作用和物理網卡類似&#xff0c;只不過不直接連接到物理硬件&#xff0c;而是通過內核網絡驅動與宿主機網絡進行交換…

Dify web前端源碼本地部署詳細教程

目錄 1. 先啟動API 2. 啟動worker服務 3. 啟動web 4. 訪問登陸地址 在前面的文章中&#xff0c;Dify源碼部署&#xff0c;搭建二次開發環境&#xff08;一&#xff09; 已經記錄了如何在本地啟動API、work、中間件。在本篇文章中&#xff0c;將概述如何啟動dify web源碼項…

CVPR 2025|英偉達聯合牛津大學提出面向3D醫學成像的統一分割基礎模型

在 2D 自然圖像和視頻的交互式分割領域&#xff0c;基礎模型已引發廣泛關注&#xff0c;這也促使人們開始構建用于醫學成像的 3D 基礎模型。然而&#xff0c;3D 醫學成像存在的領域差異以及臨床應用場景&#xff0c;要求開發一種有別于現有 2D 解決方案的專用模型。具體而言&am…

解決“Win7共享文件夾其他電腦網絡無法發現共享電腦名稱”的問題

要讓運行 Windows 7 的電腦被局域網中其他設備&#xff08;包括另一臺電腦、手機、NAS 等&#xff09;“發現”&#xff0c;必須同時滿足三個條件&#xff1a; 網絡發現功能已啟用&#xff1b;對應的后臺服務已啟動&#xff1b;防火墻規則放行。 下面給出最簡、最穩妥的 3 步設…

Python pyzmq 庫詳解:從入門到高性能分布式通信

一、前言 在現代軟件開發中&#xff0c;進程間通信&#xff08;IPC&#xff09;與分布式系統通信已經成為基礎能力。無論是構建一個微服務架構的后端&#xff0c;還是實現大規模并行計算任務&#xff0c;如何讓不同的進程或節點之間高效地傳遞消息&#xff0c;都是核心問題。 傳…

CentOS 7更換國內鏡像源

第一步&#xff1a;檢查系統版本 在修改任何配置之前&#xff0c;先確定你的 CentOS 版本&#xff0c;因為不同版本的鏡像源配置文件不同。 cat /etc/redhat-release這個命令會顯示你的 CentOS 版本信息&#xff0c;例如 CentOS Linux release 7.9.2009 (Core)。從你的錯誤日志…

詳解 doclayout_yolo:Python 文檔布局檢測

目錄一、doclayout_yolo 核心功能二、安裝方法1. 直接安裝2. 通過 PDF-Extract-Kit 安裝三、使用示例1. 快速體驗&#xff08;HuggingFace Demo&#xff09;2. 本地推理代碼3. 批量處理四、技術亮點五、應用場景六、其他說明1.相關資源2. 注意事項doclayout_yolo 是一個基于 Y…

貓頭虎AI分享|一款Coze、Dify類開源AI應用超級智能體Agent快速構建工具:FastbuildAI

貓頭虎AI分享&#xff5c;一款 Coze、Dify 類開源 AI 應用超級智能體快速構建工具&#xff1a;FastbuildAI 區別在于它的易用度和商業閉環功能 摘要&#xff1a;FastbuildAI 是一個開源的 AI 應用“快速構建 商業化閉環”工具。它讓個人開發者與小團隊用 可視化 零代碼 的方…

GitLab 安全漏洞 CVE-2025-6186 解決方案

本分分享極狐GitLab 補丁版本 18.2.2, 18.1.4, 18.0.6 的詳細內容。這幾個版本包含重要的缺陷和安全修復代碼&#xff0c;我們強烈建議所有私有化部署用戶應該立即升級到上述的某一個版本。對于極狐GitLab SaaS&#xff0c;技術團隊已經進行了升級&#xff0c;無需用戶采取任何…

【K8s】harbor安裝與推送鏡像

引言 在開發中&#xff0c;先推送鏡像到docker&#xff0c;然后直接在docker運行。但是在K8S中&#xff0c;需要動態創建或者分配機器&#xff0c;這里需要將鏡像推送到harbor倉庫&#xff0c;然后再從倉庫拉取到每臺集群機器。 docker安裝harbor&#xff1a;https://learnku…

FPGA讀取AHT20溫濕度模塊思路及實現,包含遇到的問題(IIC協議)

一.閱讀官方手冊 手冊在下方網址下載&#xff0c;該模塊在各個網店平臺均有銷售 百度網盤 請輸入提取碼 手冊重點關注IIC地址&#xff08;讀地址0x71&#xff0c;寫地址0x70&#xff09;、IIC命令和讀寫數據邏輯&#xff0c;手冊寫的比較簡單&#xff08;感覺很多細節沒到位…

項目會議怎么開才有效

要提高項目會議的有效性&#xff0c;需要做到以下幾點&#xff1a;明確會議目的、制定具體的會議議程、合理控制會議時長、提前準備會議資料、選擇合適的參會人員、設定清晰的會議目標、確保會議有決策和行動方案、會后及時跟進與落實。其中&#xff0c;明確會議目的尤為重要。…

計算機視覺第一課opencv(二)保姆級教

目錄 簡介 一、邊界填充 1.函數說明 2.案例分析 二、圖像運算 1.號運算 2.cv2.add()函數 3.圖像加權運算 三、閾值處理 四、圖像平滑處理 1.椒鹽噪聲 2.均值濾波&#xff08;Mean Filtering&#xff09; 3.方框濾波 4. 高斯濾波&#xff08;Gaussian Filtering&am…

母豬姿態轉換行為識別:計算機視覺與行為識別模型調優指南

> 在現代智能化養殖中,母豬姿態識別是健康監測的關鍵技術。本文將帶你從0到1構建高精度母豬姿態識別系統,準確率可達95%以上! ## 一、為什么母豬姿態識別如此重要? 母豬的行為姿態是其健康狀況的重要指標: - **站立姿態**:可能表示發情期或進食需求 - **側臥姿態**:…

循序漸進學 Spring (下):從注解、AOP到底層原理與整合實戰

文章目錄7. 自動裝配 (Autowiring)7.1 XML 自動裝配7.2 使用注解實現自動裝配Autowired vs Resource8. 使用注解開發&#xff08;完全體&#xff09;8.1 定義 Bean (Component 及其衍生注解)8.2 注入屬性 (Value)8.3 注入對象8.4 定義作用域 (Scope)8.5 小結&#xff1a;XML vs…

C#WPF實戰出真汁06--【系統設置】--餐桌類型設置

1、系統設置的基本概念系統設置是用于配置和管理餐桌類型和菜品類型&#xff0c;是維護整個系統的基礎數據。通過系統設置&#xff0c;用戶可以調整餐桌類型的添加&#xff0c;刪除&#xff0c;編輯&#xff0c;分頁&#xff0c;查詢&#xff0c;重置&#xff0c;列表&#xff…

旋鈕鍵盤項目---foc講解(閉環位置控制)

hello&#xff0c;周六休息了一天&#xff0c;出去打本了。趁著夜色&#xff0c;花費了幾個小時&#xff0c;也是將閉環代碼寫完&#xff0c;參考了燈哥的思路。接下來介紹一下我的整個流程&#xff1a; 一、閉環位置控制思路&#xff1a; 其實懂得了開環&#xff0c;那么閉環…