C#里有没有这样一种字符 在字符串里不显示,看上去像空格一样没有显示,但是真真正正占了一个字符,请问这到底是什么字符? 如果一个字符串里有这个字符 影响我对他进行拆分了 应该怎样消除?
有的,不过和C#没啥关系,建议学习一下有关ASCII字符的知识。
有一个字符串 “SI”明明只有两个字符 但是长度是3
这个字符串 是socket传过来的有一个字符 看不见 请问这是什么情况?
C#里有 那种看不见 但是却占了一个字符位置的 这种情况应该怎么处理?
@无线电静默: 你不要用眼睛看,既然软件说是3个字符,你很简单的,可以把每个字符的ASCII码值
显示出来,就知道是哪个ASCII码了。
string value = "9quali52ty3"; // Convert the string into a byte[]. byte[] asciiBytes = Encoding.ASCII.GetBytes(value); You now have an array of the ASCII value of the bytes. I got the following: 57 113 117 97 108 105 53 50 116 121 51
比如回车,换行啥的一个是13,一个是10,也是看不见的,TAB也是看不见的,你转成ASCII码就知道是啥了。
能通过什么方式把那个看不见的字符去掉么?因为影响我去拆分字符串了。奇怪的是 我第一次和服务器连接成功 会多收到一个看不见的字符 我再次去连接 ,又突然正常了,是不是可能有一个连接成功的字符加在我要收到的那个字符串里了 只是我看不到?
@爱编程的大叔: 谢谢 我试试 但是我主要是想把那个去掉
@无线电静默: 首先你得知道是啥字符。
当然,你也可以野蛮的把除了数字和字母之外的字符全部去掉。不过这是不得已才最后的选择了。
@爱编程的大叔: 估计不行 因为 我收到的是控制我这边程序的命令字符 如 SIG0091/ 前三位是命令类型 后三位是命令编号 最后一位是状态 如果我有多个命令 就 SIG0091/SIG001/ “/” 是命令结束符
@无线电静默: 这种情况多半就是你的通讯代码还有BUG,我以前写通讯的时候好像也出现过类似的,应该是计算流长度的时候出错造成的,造成多了一个字符。
你可以专门就通讯代码进行一下覆盖测试。
@爱编程的大叔: 目前我这边的情况是 先连接第一次,然后会出现一个看不见的字符,我断开 然后再连一次(IP 端口都没变)重复执行相同的命令 然后就没有问题了 那个看不见的字符就没有了
@无线电静默: 代码执行不一致,就是BUG了。
Socket编程入门易,精通难。
你得自己想办法把这个情况找出来,只要是容易重现的BUG,找出来还是比较容易的。
去跟踪每一个传入传出的字串长度,肯定能找出原因来的啊。
@爱编程的大叔: 我去跟踪了 那个命令长度55个字符 我这边收到56个 然后就是第一个字符前面有个看不见的字符
我按三个字符拆分 应该是SIG 但是只有SI
@无线电静默: 这种情况的话,说明cmdstr[i]里面就只有2个字符,不信你直接看cmdstr[i]的值。
@爱编程的大叔: 我刚才把收到的发送的55(实际我收到的是56)个字符全转换成ASC||码了,第一个的ascii码是30 我substring(0,3) 是截取3个字符的命令啊 但是我看了 而且 cmdstr[i]里面内容确实是只有两个 但是我测试了他长度 长度就是三 只是有个看不到而已
@爱编程的大叔: ascii码 记录分隔符 可能是socket自己加的吧
@无线电静默: 问题不在这儿,你得先解决SIG为啥变成SI的事情。
就是说通讯代码有BUG,你在这儿折腾白费劲。
@爱编程的大叔: 自学编程小白。 服务器端是别人用MFC写的没法编译,我写的客户端,目的就是接受信息然后按格式拆分, 问题就第一次发送我接受 多个字符 后面断开再连接就没有了 因为这个是分工合作的东西,我只想确认我这边没有问题。 cmdstr[i]里面是就只有2个字符,但是他的长度确实是3 这才是我郁闷的 如果这个不能找到原因 就只有判断第一个字符 然后再做操作
@爱编程的大叔:
数据被完整传过来
被拆分也是正确的
cmdstr[0]里确实就是“SIG0551” 不是“SI” 所以综上 就是前面多了个ascii码30 的字符 我只是不晓得怎么来的