C#去除byte[]转换成字符串后byte为null的“空格”

分类:.Net知识问答| 发布:camnprbubuol| 查看: | 发表时间:2011/7/20
ASCII码表

  

信息在计算机上是用二进制表示的,这种表示法让人理解就很困难。因此计算机上都配有输入和输出设备,这些设备的主要目的就是,以一种人类可阅读的形式将信息在这些设备上显示出来供人阅读理解。为保证人类和设备,设备和计算机之间能进行正确的信息交换,人们编制的统一的信息交换代码,这就是ASCII码表,它的全称是“美国信息交换标准代码”。

 

八进制十六进制十进制字符八进制十六进制十进制字符
00000nul1004064@
01011soh1014165A
02022stx1024266B
03033etx1034367C
04044eot1044468D
05055enq1054569E
06066ack1064670F
07077bel1074771G
10088bs1104872H
11099ht1114973I
120a10nl1124a74J
130b11vt1134b75K
140c12ff1144c76L
150d13er1154d77M
160e14so1164e78N
170f15si1174f79O
201016dle1205080P
211117dc11215181Q
221218dc21225282R
231319dc31235383S
241420dc41245484T
251521nak1255585U
261622syn1265686V
271723etb1275787W
301824can1305888X
311925em1315989Y
321a26sub1325a90Z
331b27esc1335b91[
341c28fs1345c92\
351d29gs1355d93]
361e30re1365e94^
371f31us1375f95_
402032sp1406096
412133!1416197a
422234"1426298b
432335#1436399c
442436$14464100d
452537%14565101e
462638&14666102f
472739`14767103g
502840(15068104h
512941)15169105i
522a42*1526a106j
532b43+1536b107k
542c44,1546c108l
552d45-1556d109m
562e46.1566e110n
572f47/1576f111o
603048016070112p
613149116171113q
623250216272114r
633351316373115s
643452416474116t
653553516575117u
663654616676118v
673755716777119w
703856817078120x
713957917179121y
723a58:1727a122z
733b59;1737b123{
743c60<1747c124|
753d61=1757d125}
763e62>1767e126~
773f63?1777f127del
ASCII码对照表
 

Web开发时,如下的ASCII码只要加上&#和;就可以变成Web可以辨认的字符了在处理特殊字符的时候特别有用,如:’ 单引号在数据库查询的时候是杀手,但是如果转换成’(注意:转换后的机构 有:&# +字符的ASCII码值+; 三个部分组成)再来存数据库,就没有什么影响了。其他的字符与ASCII码的对照如下表

ASCII表

ASCII值控制字符ASCII值控制字符ASCII值控制字符ASCII值控制字符
0NUL32(space)64@96
1SOH3365A97a
2STX3466B98b
3ETX35#67C99c
4EOT36$68D100d
5ENQ37%69E101e
6ACK38&70F102f
7BEL39,71G103g
8BS40(72H104h
9HT41)73I105i
10LF42*74J106j
11VT43+75K107k
12FF44,76L108l
13CR45-77M109m
14SO46.78N110n
15SI47/79O111o
16DLE48080P112p
17DCI49181Q113q
18DC250282R114r
19DC351383X115s
20DC452484T116t
21NAK53585U117u
22SYN54686V118v
23TB55787W119w
24CAN56888X120x
25EM57989Y121y
26SUB58:90Z122z
27ESC59;91[123{
28FS60<92\124|
29GS61=93]125}
30RS62>94^126~
31US63?95127DEL
 
NULVT 垂直制表SYN 空转同步
SOH  标题开始FF   走纸控制ETB  信息组传送结束
STX  正文开始CR   回车CAN  作废
ETX  正文结束SO   移位输出EM   纸尽
EOY  传输结束SI    移位输入SUB  换置
ENQ  询问字符DLE  空格ESC  换码
ACK  承认DC1  设备控制1FS   文字分隔符
BEL  报警DC2  设备控制2GS   组分隔符
BS   退一格DC3  设备控制3RS   记录分隔符
HT   横向列表DC4  设备控制4US   单元分隔符
LF   换行NAK  否定DEL  删除
 
键盘常用ASCII码
ESC键 VK_ESCAPE (27)
回车键: VK_RETURN (13)
TAB键: VK_TAB (9)
Caps Lock键: VK_CAPITAL (20)
Shift键: VK_SHIFT ($10)
Ctrl键: VK_CONTROL (17)
Alt键: VK_MENU (18)
空格键: VK_SPACE ($20/32)
退格键: VK_BACK (8)
左徽标键: VK_LWIN (91)
右徽标键: VK_LWIN (92)
鼠标右键快捷键:VK_APPS (93)

Insert键: VK_INSERT (45)
Home键: VK_HOME (36)
Page Up: VK_PRIOR (33)
PageDown: VK_NEXT (34)
End键: VK_END (35)
Delete键: VK_DELETE (46)

方向键(←): VK_LEFT (37)
方向键(↑): VK_UP (38)
方向键(→): VK_RIGHT (39)
方向键(↓): VK_DOWN (40)

F1键: VK_F1 (112)
F2键: VK_F2 (113)
F3键: VK_F3 (114)
F4键: VK_F4 (115)
F5键: VK_F5 (116)
F6键: VK_F6 (117)
F7键: VK_F7 (118)
F8键: VK_F8 (119)
F9键: VK_F9 (120)
F10键: VK_F10 (121)
F11键: VK_F11 (122)
F12键: VK_F12 (123)

Num Lock键: VK_NUMLOCK (144)
小键盘0: VK_NUMPAD0 (96)
小键盘1: VK_NUMPAD0 (97)
小键盘2: VK_NUMPAD0 (98)
小键盘3: VK_NUMPAD0 (99)
小键盘4: VK_NUMPAD0 (100)
小键盘5: VK_NUMPAD0 (101)
小键盘6: VK_NUMPAD0 (102)
小键盘7: VK_NUMPAD0 (103)
小键盘8: VK_NUMPAD0 (104)
小键盘9: VK_NUMPAD0 (105)
小键盘.: VK_DECIMAL (110)
小键盘*: VK_MULTIPLY (106)
小键盘+: VK_MULTIPLY (107)
小键盘-: VK_SUBTRACT (109)
小键盘/: VK_DIVIDE (111)

Pause Break键: VK_PAUSE (19)
Scroll Lock键: VK_SCROLL (145)

string 转换成 Char[]
            string ss="abcdefg";
            char[] cc=ss.ToCharArray();

Char[] 转换成string
            string s=new string(cc);

此外,byte[] 与 string 之间的装换
          byte[] bb=Encoding.UTF8.GetBytes(ss);
            string s=Encoding.UTF8.GetString(bb);


问题:byte[]转换成字符串,单个byte为0的删除不了,就是所谓的“空间”,怎么删除它的问题:

表现形式:{"result":1,"table":[{"no":0,"url":"3648_12/4938_7297_13.png               "}]}

问题进一步描述:(如下)

byte[]   aaa   =   new   byte[8]; 
string   temp   =   string.Empty; 
System.Text.Encoding.Default.GetBytes( "中国 ").CopyTo(aaa,0); 
temp   =   System.Text.Encoding.Default.GetString(aaa); 

这时得到的temp.Length为6   而不是2,也就是说把值为0的byte也转换了。 
不知道该怎样得到仅含有有效字符的字符串?(如此例就是“中国”)

尝试的方法(失败)有:Trim();

Replace(" ","");

判断ascii码是32删除;都不行的

最终的解决(成功)方法

byte[] Camnpr = new byte[256];//byte值demo:104,55,89,69,0,0,0,0,......

byte[] bttemp = new byte[1];
string str = string.Empty;

foreach (byte btt in Camnpr)
{
if (btt != 0)
{
bttemp[0] = btt;
str += Encoding.ASCII.GetString(bttemp);//通过一个一个byte来ascii码转换。(ascii码表参考上边)
}
else
{
break;
}
}

str就是要的去除“空格”的字符串。

解决的缺陷

只能去除半角"空格",不能去除全角"空格";

(本帖转载请注明出处;欢迎联系站长,探讨完美解决方法!)

365据说看到好文章不转的人,服务器容易宕机
原创文章如转载,请注明:转载自郑州网建-前端开发 http://camnpr.com/
本文链接:http://camnpr.com/net-wiki/386.html