【发布时间】:2013-10-30 08:49:49
【问题描述】:
我在某些设备上实现了应用程序,该应用程序正在处理从服务器发送接收数据。 来自服务器的数据通常以这种形式出现:
"1;username;someInteger;"
解析很简单,我使用strtok 来从该字符串中检索单个值,例如:1、username 和someInteger。
但现在可能会出现服务器将 unicode 字符串作为username 发送给我的情况。
我认为一个好主意是使用编码为 UTF-8 字符串的用户名(对吗?)。你有什么建议 - 我应该如何从上面的字符串中解析它?例如,使用什么符号作为分隔符(例如,代替“;”),或者使用哪些函数从上面的字符串中提取 username?
因为这是一些嵌入式设备,我想避免在那里安装一些第三方库(这可能甚至不可能),所以更“纯”的方式会更可取。
【问题讨论】:
-
避免
strtok。它不是线程安全的。请改用boost::split。 -
@rightfold 避免使用
boost来简单地替换strtok()。这个太大了。请改用strtok_r()。 -
@H2CO3:是的,就像我提到的那样,这是嵌入式设备 - 我还试图避免在那里安装一些大型第三方库(即使这可能也不确定)
-
@H2CO3 你看到
strtok源代码,还是为它生成的二进制代码?与“boost::split”相比,它“小”吗? -
@Abyx 我的 cmets 都在哪里?至于你的问题:here 是
strtok()的实现,这里是boost::algorithm::string::split()使用的iter_split()。总而言之,strtok()的 SLOC 比 boost 的要少,但它的优点是 1. 标准,2. 不需要包含巨大的标头,3. 它也可以在 C 中工作。