You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中如何为字符串添加/移除1字节STX、ETX控制字符

Swift 实现 STX/ETX 控制字符的添加与移除

基础定义

两个控制字符均为单字节ASCII字符,UTF-8编码下固定占1字节,符合字节长度要求:

  • STX(文本开始标记):ASCII 编码值 0x02
  • ETX(文本结束标记):ASCII 编码值 0x03

字节结构对应参考:
字节流结构:<1B>---<3B>--<1B>-<1B>---<3B>--<1B>
逻辑对应结构:<STX><字符串内容><ETX><STX><字符串内容><ETX>
注:标识中1B代表1字节长度,3B代表3字节长度

功能实现

1. 字符串首尾添加STX/ETX标记

直接通过String扩展实现方法,调用后会在原字符串开头插入1字节STX、末尾插入1字节ETX,不修改原内容:

extension String {
    func wrappedWithSTXETX() -> String {
        let stx = String(UnicodeScalar(0x02))
        let etx = String(UnicodeScalar(0x03))
        return stx + self + etx
    }
}

2. 移除字符串中的STX/ETX控制字符

根据业务场景分两种实现,按需选用:

场景A:清除所有位置的STX/ETX字符

适合处理多段拼接的报文,会过滤掉字符串中任意位置出现的STX、ETX字符,返回纯业务内容:

extension String {
    func removingAllSTXETX() -> String {
        let stx = UnicodeScalar(0x02)
        let etx = UnicodeScalar(0x03)
        return self.unicodeScalars
            .filter { $0 != stx && $0 != etx }
            .map(String.init)
            .joined()
    }
}

场景B:仅移除首尾配对的STX/ETX标记

适合处理单段独立报文,仅当字符串开头是STX、末尾是ETX时,才会移除首尾两个控制字符;如果首尾标记不匹配,直接返回原字符串,不会误删内容中异常混入的字符:

extension String {
    func unwrapSTXETX() -> String {
        let stx = String(UnicodeScalar(0x02))
        let etx = String(UnicodeScalar(0x03))
        guard hasPrefix(stx), hasSuffix(etx) else { return self }
        var content = self
        content.removeFirst()
        content.removeLast()
        return content
    }
}

调用示例

// 包裹标记
let rawStr = "test123"
let wrappedStr = rawStr.wrappedWithSTXETX()
// wrappedStr 总长度比rawStr多2,首尾分别是STX、ETX字符

// 清除所有控制字符
let combinedStr = wrappedStr + wrappedStr // 两段报文拼接
let fullCleaned = combinedStr.removingAllSTXETX()
// fullCleaned 输出为 "test123test123",无任何控制字符

// 仅拆首尾标记
let singleUnwrapped = wrappedStr.unwrapSTXETX()
// singleUnwrapped 输出为 "test123",和原始内容完全一致

内容的提问来源于stack exchange,提问作者spt025

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 08:09:27