如果 NUL 终止符不在切片末尾,如何从以 NUL 终止的字节切片中获取“&str”?

2023-11-24

While CStr通常用于 FFI,我正在阅读&[u8]它以 NUL 结尾,并确保是有效的 UTF-8,因此不需要检查。

然而,NUL 终止符不一定位于切片的末尾。有什么好的方法可以得到这个&str?

建议使用CStr::from_bytes_with_nul,但这会在内部引起恐慌\0字符(当\0不是最后一个字符)。


我将使用迭代器适配器来查找第一个零字节的索引:

pub unsafe fn str_from_u8_nul_utf8_unchecked(utf8_src: &[u8]) -> &str {
    let nul_range_end = utf8_src.iter()
        .position(|&c| c == b'\0')
        .unwrap_or(utf8_src.len()); // default to length if no `\0` present
    ::std::str::from_utf8_unchecked(&utf8_src[0..nul_range_end])
}

这样做的主要优点是要求捕获所有情况(例如数组中没有 0)。

如果您想要检查格式正确的 UTF-8 的版本:

pub fn str_from_u8_nul_utf8(utf8_src: &[u8]) -> Result<&str, std::str::Utf8Error> {
    let nul_range_end = utf8_src.iter()
        .position(|&c| c == b'\0')
        .unwrap_or(utf8_src.len()); // default to length if no `\0` present
    ::std::str::from_utf8(&utf8_src[0..nul_range_end])
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果 NUL 终止符不在切片末尾,如何从以 NUL 终止的字节切片中获取“&str”? 的相关文章

  • 检查字符串是否编码为 UTF-8

    function seems utf8 str length strlen str for i 0 i lt length i c ord str i if c lt 0x80 n 0 0bbbbbbb elseif c 0xE0 0xC0
  • 向量中的可变结构

    我正在尝试创建一个向量来跟踪游戏中的敌人 该向量将保存一堆可变结构 我有一个世界结构 其中有敌人作为其成员 如下所示 pub struct World pub player Creature pub enemies Vec
  • 将整数转换为特定格式的十六进制字符串

    我是 python 新手 有以下问题 我需要将整数转换为 6 个字节的十六进制字符串 例如 281473900746245 gt xFF xFF xBF xDE x16 x05 十六进制字符串的格式很重要 int 值的长度是可变的 格式 0
  • Python3,当 UserString 不表现为字符串时?

    在Python3中我使用UserString扩展内置字符串的功能 通常UserStrings 的行为就像strs 但与re我遇到了意想不到的情况TypeError bpython version 0 17 1 on top of Pytho
  • 以 str.format 切片字符串

    我想实现以下目标str format x y 1234 5678 print str x 2 str y 2 我能够做到这一点的唯一方法是 print 0 1 format str x 2 str y 2 现在 这是一个例子 我真正拥有的是
  • MySql 查询在选择中将 NULL 替换为空字符串

    如何用空字符串替换 select 中的 NULL 值 输出 NULL 值看起来不太专业 这是非常不寻常的 根据我的语法 我希望它能够工作 我希望能得到一个解释 为什么没有 select CASE prereq WHEN prereq IS
  • C++:字符串流有什么好处?

    谁能告诉我一些在 C 中使用字符串流的实际例子 即使用流插入和流提取运算符输入和输出到字符串流 您可以使用字符串流来转换任何实现operator lt lt 到一个字符串 include
  • java的split string方法也可以返回带分隔符的数组

    当我们使用String Split java中对字符串进行分割的方法 其工作原理如下 String s hello my dear String ss s split 数组ss包含 Hello my dear 但在这种情况下 空格 即分隔符
  • Google 地图查询返回的 JSON 包含像 \x26 这样的编码字符(如何解码?)

    在 Java 应用程序中 我获取 JSON 来自 Google 地图 其中包含以下字符 x26我想将其转换为其原始字符 据我所知 这是一个 UTF 8 表示法 但我不完全确定 在源 JSON 中 可能会出现各种编码字符 例如 x3c div
  • Notepad++:: 通过正则表达式完全删除包含问号的行

    嗯 我想这就是我的标题 这对于我将要实现的目标来说是不言自明的 这是我当前的文本文件的示例 Diva was the winning song of the Eurovision Song Contest 1998 Who will win
  • 将 char* 转换为字符串 C++

    我知道字符串的起始地址 例如 char buf 和最大长度int l 字符串的 即字符总数小于或等于l 获取值的最简单方法是什么string来自指定的内存段 换句话说 如何实现string retrieveString char buf i
  • 在python中将文本文件解析为列表

    我对 Python 完全陌生 我正在尝试读取包含单词和数字组合的 txt 文件 我可以很好地读取 txt 文件 但我正在努力将字符串转换为我可以使用的格式 import matplotlib pyplot as plt import num
  • 使用安全函数在 C 中将字符串添加到字符串

    我想将文件名复制到字符串并附加 cpt 但我无法使用安全函数 strcat s 来做到这一点 错误 字符串不是空终止的 我确实设置了 0 如何使用安全函数修复此问题 size strlen locatie size nieuw char m
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co
  • 将带撇号的字符串传递给辅助方法无法正确显示

    我正在使用 Rails 教程中的辅助方法 它将两个字符串连接在一起 以便在视图中的标题选择器中使用 它工作得很好 除非字符串中有撇号 当 group name 包含撇号时 结果如下 这是方法 app helpers application
  • 如何定义带有字符串值的枚举?

    我正在尝试定义一个Enum并添加 CSV 或类似文件中使用的有效常用分隔符 然后我将它绑定到ComboBox作为数据源 因此每当我在枚举定义中添加或删除时 我不需要更改组合框中的任何内容 问题是如何用字符串表示形式定义枚举 例如 publi
  • 从向量获取特征对象引用

    我正在努力从 a 中获取元素Vec这是一生的参考 我将我的代码简化为 pub trait Runnable pub struct RunList lt a gt runnables Vec lt a mut Runnable gt impl
  • JavaScript 支持逐字字符串吗?

    在 C 中 您可以像这样使用逐字字符串 server share file txt JavaScript中有类似的东西吗 模板字符串支持换行 so you can do this if you want https developer mo
  • 需要提取字符串中点后的最后一个数字,如“7.8.9.1.5.1.100”

    我需要提取 C 字符串中最后一个点后面的最后一个数字 例如 7 8 9 1 5 1 100 并将其存储在整数中 Added 该字符串也可以是 7 8 9 1 5 1 1 或 7 8 9 1 5 1 0 我还想验证它在最后一个点之前恰好是 7
  • 使用自定义比较器在 Java 中创建 SortedMap

    我想创建一个TreeMap在 Java 中具有自定义排序顺序 排序后的键是字符串 需要根据第二个字符进行排序 这些值也是字符串 示例地图 Za FOO Ab Bar 您可以像这样使用自定义比较器 Comparator

随机推荐

  • 如何检测单个文件的文件系统大小限制

    有没有办法检测单个文件的文件系统大小限制 例如 fat 32 上的 4GB 它必须在 Windows 操作系统上运行 但最好是便携式解决方案 检测文件系统类型可能是一种解决方法 但我也不知道如何做到这一点 有人可以帮我吗 先感谢您 托比亚斯
  • Typescript 编译为单个文件

    我正在使用 TS 1 7 我正在尝试将我的项目编译为一个大文件 我将能够将其包含在我的 html 文件中 我的项目结构如下所示 build Build directory src source root main ts my Main fi
  • 将函数转换为使用尾递归——一项正式研究

    有没有人写过一篇正式论文描述一种 自动 将函数转换为尾递归的方法 我正在寻找大学级别的正式处理 包括限制 可以转换的函数类型 转换程序 以及 如果可能 正确性证明 Haskell 中的例子将是一个额外的好处 一种 自动 将函数转换为尾递归的
  • 在 iPhone 上“解压”文件

    我正在编写一个 iPhone 应用程序 它从网络服务器下载一个 tar gzip 压缩文件 然后需要取消存档该文件 以便可以将其复制到应用程序的 Documents 文件夹中 我使用 tar gzip 是因为我想在一个 HTTP 请求中下载
  • 在WebView Metro Style应用程序中加载本地html文件

    我在 Metro 风格应用程序的 WebView 控件中加载 html 文件时遇到了一些问题 我一直在互联网上搜索 发现无法使用 NavigateTo 方法加载本地 html 文件 我还发现有一种解决方法 您可以使用控件的 Navigate
  • 如何计算 Objective-C 中特定日期的一年中的第几天?

    这是我发现自己花了几个小时才弄清楚的事情 因此想与大家分享 问题是 如何确定特定日期是一年中的哪一天 例如当不是闰年时 1月15日是第15天 12月31日是第365天 尝试这个 NSCalendar gregorian NSCalendar
  • 复合类型数组的正确语法

    CREATE TYPE pencil count AS pencil color varchar 30 count integer CREATE TABLE pencils id serial pencils pencil count IN
  • ggplot2 按组绘制曲线下阴影面积

    我正在尝试对两条曲线下的区域进行着色 我想得到与中完全相同的图 尽管没有阈值 上一篇文章 唯一的区别是我想使用geom line 代替stat density 有什么办法可以做到这一点吗 提前致谢 我已经尝试过该帖子中建议的方法 但是当我使
  • 我应该向 App Store 发布一个包含打印语句的应用程序吗?

    我打算很快将我的应用程序发布到 App Store 在 TestFlight 之后 我有很多视图控制器print其中的陈述 这print语句用于测试目的 调试器 用户永远不会看到它们 发布后 如果我在应用程序中包含或不包含打印语句 会有什么
  • 如何发布选择列表中的所有选项?

    我有一个选择多个列表 其中包含一些项目 它是 ACL 的 IP 地址列表 人们可以添加 删除 IP 然后保存列表 但是 除非您选择列表中的某个项目 POST selectName 不包含任何值 我怎样才能做到这一点 我知道我可以用 java
  • Matlab/CUDA:海浪模拟

    我学过 模拟海水 Jerry Tessendorf 的文章并尝试对统计波模型进行编程 但我没有得到正确的结果 我不明白为什么 In my program I tried only to create a wave height field
  • Azure 移动 Web 服务测试页的身份验证

    开发 Azure 移动服务时 我可以在本地运行时运行测试页面 如果我按下 尝试 按钮 我可以测试我的 api 但是当发布到 Azure 时 我需要进行身份验证才能使用 尝试 按钮 我的问题是测试页发布到云端时的用户名和密码是什么 据我所知
  • ListView ManipulationCompleted 事件在手机上不起作用

    我在 Windows 10 UWP 应用程序中有以下代码 MyListView ManipulationMode ManipulationModes TranslateX MyListView ManipulationStarted s e
  • 如何在android中的sqlite中实现一对多对象数据库

    我很新SQLite and SQL我正在努力解决以下问题 我的应用程序将显示社区成员列表 如果我点击某个成员 我可以看到该成员发布的帖子列表 帖子是一个包含名称 时间和消息的对象 我怎样才能将其存储在SQLite数据库 以便我可以通过以下方
  • 阴影穿透后代组合器 '/deep/' ,包括 '::shadow' 伪元素,已被弃用,那么我们如何穿透 Shadow DOM?

    假设我们有一些 CSS 代码 例如动画 CSS 加载器 我们希望在所有使用 Shadow DOM 的 Web 组件中使用它 如果我们无法像使用 Shadow DOM 那样穿透 Shadow DOM 我们如何重新使用这个 CSS 代码 sha
  • Python 找不到模块

    给定以下在 PyDev 中创建的 python 项目 algorithms init py neighborhood init py neighbor connector py init py manager py references p
  • package.json 中的依赖是什么 - nodejs

    在我的节点项目中 将独立模块构建到以 main js 作为入口点的文件夹中 并在与不同文件相同的文件夹中找到该模块的帮助程序 Ex Aggregator package json main js node modules helper1 j
  • 无法启动模拟应用程序:未知错误

    OS X 10 5 7 正版 Mac Xcode 3 1 3 iPhone SDK 3 0 当我尝试在模拟器中执行 iPhone 应用程序时 我收到了可怕的错误消息 Failed to launch simulated applicatio
  • 从 MSBuild 脚本发出 HTTP 请求

    我正在寻找一种从 msbuild 脚本中点击 Web 应用程序 Restful 服务 URL 来触发远程过程的方法 除了调用外部应用程序之外 还有什么方法可以做到这一点吗 理想情况下 如果服务返回 http 200 以外的其他内容 我正在寻
  • 如果 NUL 终止符不在切片末尾,如何从以 NUL 终止的字节切片中获取“&str”?

    While CStr通常用于 FFI 我正在阅读 u8 它以 NUL 结尾 并确保是有效的 UTF 8 因此不需要检查 然而 NUL 终止符不一定位于切片的末尾 有什么好的方法可以得到这个 str 建议使用CStr from bytes w