首页 新闻 会员 周边 捐助

C#里有没有这样一种字符串

0
[已解决问题] 解决于 2016-01-18 20:12

C#里有没有这样一种字符   在字符串里不显示,看上去像空格一样没有显示,但是真真正正占了一个字符,请问这到底是什么字符? 如果一个字符串里有这个字符 影响我对他进行拆分了 应该怎样消除?

无线电静默的主页 无线电静默 | 初学一级 | 园豆:28
提问于:2016-01-18 14:37
< >
分享
最佳答案
0

 有的,不过和C#没啥关系,建议学习一下有关ASCII字符的知识。

http://baike.baidu.com/item/ASCII

奖励园豆:5
爱编程的大叔 | 高人七级 |园豆:30844 | 2016-01-18 14:43

有一个字符串 “SI”明明只有两个字符 但是长度是3
这个字符串 是socket传过来的有一个字符 看不见 请问这是什么情况?
C#里有 那种看不见 但是却占了一个字符位置的  这种情况应该怎么处理?

无线电静默 | 园豆:28 (初学一级) | 2016-01-18 14:51

@无线电静默: 你不要用眼睛看,既然软件说是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码就知道是啥了。

爱编程的大叔 | 园豆:30844 (高人七级) | 2016-01-18 14:54

能通过什么方式把那个看不见的字符去掉么?因为影响我去拆分字符串了。奇怪的是 我第一次和服务器连接成功 会多收到一个看不见的字符  我再次去连接 ,又突然正常了,是不是可能有一个连接成功的字符加在我要收到的那个字符串里了 只是我看不到?

 

无线电静默 | 园豆:28 (初学一级) | 2016-01-18 14:55

@爱编程的大叔: 谢谢  我试试  但是我主要是想把那个去掉

无线电静默 | 园豆:28 (初学一级) | 2016-01-18 14:56

@无线电静默: 首先你得知道是啥字符。

当然,你也可以野蛮的把除了数字和字母之外的字符全部去掉。不过这是不得已才最后的选择了。

爱编程的大叔 | 园豆:30844 (高人七级) | 2016-01-18 14:56

@爱编程的大叔: 估计不行 因为  我收到的是控制我这边程序的命令字符 如 SIG0091/ 前三位是命令类型 后三位是命令编号 最后一位是状态   如果我有多个命令 就 SIG0091/SIG001/       “/” 是命令结束符

无线电静默 | 园豆:28 (初学一级) | 2016-01-18 15:00

@无线电静默: 这种情况多半就是你的通讯代码还有BUG,我以前写通讯的时候好像也出现过类似的,应该是计算流长度的时候出错造成的,造成多了一个字符。

你可以专门就通讯代码进行一下覆盖测试。

爱编程的大叔 | 园豆:30844 (高人七级) | 2016-01-18 15:02

@爱编程的大叔: 目前我这边的情况是  先连接第一次,然后会出现一个看不见的字符,我断开 然后再连一次(IP 端口都没变)重复执行相同的命令 然后就没有问题了 那个看不见的字符就没有了

无线电静默 | 园豆:28 (初学一级) | 2016-01-18 15:12

@无线电静默: 代码执行不一致,就是BUG了。

Socket编程入门易,精通难。

你得自己想办法把这个情况找出来,只要是容易重现的BUG,找出来还是比较容易的。

去跟踪每一个传入传出的字串长度,肯定能找出原因来的啊。

爱编程的大叔 | 园豆:30844 (高人七级) | 2016-01-18 15:19

@爱编程的大叔: 我去跟踪了 那个命令长度55个字符 我这边收到56个  然后就是第一个字符前面有个看不见的字符

 我按三个字符拆分 应该是SIG  但是只有SI 

无线电静默 | 园豆:28 (初学一级) | 2016-01-18 15:23

@无线电静默: 这种情况的话,说明cmdstr[i]里面就只有2个字符,不信你直接看cmdstr[i]的值。

爱编程的大叔 | 园豆:30844 (高人七级) | 2016-01-18 15:26

@爱编程的大叔: 我刚才把收到的发送的55(实际我收到的是56)个字符全转换成ASC||码了,第一个的ascii码是30  我substring(0,3) 是截取3个字符的命令啊  但是我看了 而且 cmdstr[i]里面内容确实是只有两个 但是我测试了他长度 长度就是三  只是有个看不到而已

无线电静默 | 园豆:28 (初学一级) | 2016-01-18 15:54

@爱编程的大叔:  ascii码    记录分隔符  可能是socket自己加的吧

无线电静默 | 园豆:28 (初学一级) | 2016-01-18 15:57

@无线电静默: 问题不在这儿,你得先解决SIG为啥变成SI的事情。

就是说通讯代码有BUG,你在这儿折腾白费劲。

爱编程的大叔 | 园豆:30844 (高人七级) | 2016-01-18 16:02

@爱编程的大叔: 自学编程小白。 服务器端是别人用MFC写的没法编译,我写的客户端,目的就是接受信息然后按格式拆分, 问题就第一次发送我接受 多个字符 后面断开再连接就没有了 因为这个是分工合作的东西,我只想确认我这边没有问题。 cmdstr[i]里面是就只有2个字符,但是他的长度确实是3 这才是我郁闷的 如果这个不能找到原因 就只有判断第一个字符 然后再做操作

无线电静默 | 园豆:28 (初学一级) | 2016-01-18 16:14

@爱编程的大叔: 

数据被完整传过来

被拆分也是正确的

cmdstr[0]里确实就是“SIG0551” 不是“SI”   所以综上 就是前面多了个ascii码30 的字符 我只是不晓得怎么来的

无线电静默 | 园豆:28 (初学一级) | 2016-01-18 16:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册