您现在的位置:龙卷风首页 ›› 网络编程 ›› 阅读文章

从宏观应用到微观原理——XML-RPC到Byte与String互相转换

从XML-RPC API开发,到Byte与String的相互转换,所做的工作性质已经发生根本性的改变。一个是运用,一个是原理。

这几天在学习XML-RPC的应用:MetaWeblog API的开发。

这个东西的原理并不复杂,尤其是使用了开源的XML-RPC组件XML-RPC.Net之后,可以用“不费吹灰之力”来形容。需要亲自动手的东西变得很少,除了熟悉一下XML-RPC.NET的接口以外,其余的工作就是日常在不断使用的普通技术了。

然而下午在动手时,还是因此而走入“微观世界”。相对而言,MetaWeblog API就是宏观应用,需要具备的知识就是对XML-RPC数据流的理解而已。而所谓的“微观世界”,却是编程语言最基础的东西,比如说数据类型的转换。虽然严格来说,我们也只是在使用微软提供的.NET API而已,然而毕竟要理解一些东西。

Byte与String的互相转换。

Byte是数值类型。String是字符串。这两种类型的转换原理,如果要详细叙述,估计可以写成一本书。我的理解是,字符串不过是一组字符,而字符是通过字符编码集与数值一一对应,而数值又可以用bytes来储存。这其中有许多的规定和规律。两者的转换,就是建立在这些规律上的。否则,byte数组就变成毫无意义的密码数字。

所以会考察到这个层面,是因为用到了用户检验。用户检验需要通过数据库查询用户密码字符串,而我的用户密码不是明文存储的,是经过MD5之后存储的一段密文。用到MD5加密,就需要用到String和Byte,所有的密码字符,经过MD5加密之后,都变成了一串数字,即Byte数组。而为了方便使用和保存,我们又把Byte数组转化成字符串。

到现在我才明白,MD5加密之后的字符串,其实是一串数值。之所以会出现英文字符,那只是16进制的写法!不信你可以考察一下密文,英文字符只有A-F。

明白了这个道理以后,心理就释然了。之前一直在用同事提供的组件来做MD5加密工作,也没有去仔细研究其中的原理。

顺便记录一下Byte转String的方法:Byte.ToString(String format)

format 的取值是:

格式字符串 结果
G 或 g
如有可能,将枚举项显示为字符串值,否则显示当前实例的整数值。如果枚举定义中设置了 Flags 属性,则串联每个有效项的字符串值并将各值用逗号分开。如果未设置 Flags 属性,则将无效值显示为数字项。

F 或 f
如有可能,将枚举项显示为字符串值。如果值可以完全显示为枚举项的总和(即使未提供 Flags 属性),则串联每个有效项的字符串值并将各值用逗号分开。如果值不能完全由枚举项确定,则将值格式化为整数值。

D 或 d
以尽可能短的表示形式将枚举项显示为整数值。

X 或 x
将枚举项显示为十六进制值。按需要将值表示为带有前导零,以确保值的长度最少有八位。

Byte.ToString("X"),就是将Byte数值转化为16进制形式的字符串。

在闲暇的时候,可以顺藤摸瓜,编写程序的过程,深入微观细节。而在工作的时候,为了保证效率,往往并不允许这样做。只能熟悉API,照着API进行编码。是否进行“顺藤摸瓜”,决定了一个程序员的成就,也决定他的职业生涯。

作者 不见不散 本文仅代表作者观点,与龙卷风资讯网立场无关。

我来说两句

内容/Content