防止空字符终止我的字符串的最简单方法是什么?

What's the easiest way to prevent null chars from terminating my string?

我目前正在编写一些 C 代码以通过蓝牙转发 CAN 消息,反之亦然(µC 东西)。问题是我配对的蓝牙设备使用“00”作为命令,而我的蓝牙库在从 BT 接收时使用 char[] 来缓冲字符串。这不可避免地终止了字符串,因为它将命令解释为 NULL 字符。此外,CAN 帧中的任何空数据字节都会导致同样的问题。

通过将 CAN 消息存储在字节数组中并将一系列字节后跟一个 CR 发送到 BT 模块,我能够解决从 CAN 到 BT 的问题,但反之则不然很简单,因为 BT 库正在使用各种基于字符串的命令。

有没有一种简单的方法可以防止 NULL 导致意外终止,或者我是否必须将整个库重写为合适的数据类型,在这种情况下哪种方法最有效?任何想法表示赞赏!

C中没有"string"类型;你在 C 中所说的字符串实际上只是一个 char *,它也只是一系列字节。每当您将这样的一系列字节传递给字符串处理函数(无论是否是标准 C 库的一部分)时,这些函数都会将任何嵌入的 NULL 视为字符串终止,并在那里结束处理。但是,这并不意味着您的二进制数据在该位置结束。

您的问题不是您的库获取了字符串,而是您混淆了二进制数据和字符串。您不是在处理字符串,而是在处理二进制数据。如果有帮助,您可以将 char * 变量转换为 void * 变量;这不是绝对必要的,但它可以帮助您记住它是二进制数据。然后,使用打包 struct(如果数据具有固定偏移量)或编写自定义解析器函数(如果没有)来处理进出 CAN 总线的数据。