|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
以前学了大概半年时间的asp(没有机会做大系统,最多是自己对公司系统做些调整和修改还有一些小程序)。应该说开始接触asp.net是今年元月5号的事。现在很想把公司的系统重新用.net来架构,却不知道如何下手。比来要改写一个中心加密认证类,从C#改写成Java。
发明在调试时,加密的数据不管怎样也对不上。
经由跟踪,发明成绩出在C#和Javabyte范例的区分上:在C#里byte范例是无标记的,而Java里是有标记的,以是C#里的129到Java里就成了正数。
发明了成绩,办理就对照简单了,针对Java的byte,接纳Int来举行存储。
经由过程以下代码从byte到int举行转换:
[java]viewplaincopy
- /**
- *frombytetoint,becau搜索引擎优化fbyteinjavaissigned
- */
- privatestaticinttoInt(intb){
- returnb>=0?(int)b:(int)(b+256);
- }
关于上面C#的代码:
[c-sharp]viewplaincopy
- privatestaticAuthenticationTicketFromByteArray(byte[]buf)
- {
- MemoryStreamms=newMemoryStream(buf);
- BinaryReaderreader=newBinaryReader(ms);
- shortversion=reader.ReadInt16();
- shortscope=reader.ReadInt16();
- intkey=reader.ReadInt32();
- }
改写为以下情势,相称于从头完成BinaryReader的ReadInt16和ReadInt32办法。
[java]viewplaincopy
- privatestaticAuthenticationTicketFromByteArray(int[]bufInt)
- {
- intversion=readInt16(bufInt);
- intscope=readInt16(bufInt);
- longkey=readInt32(bufInt);
- }
- privatestaticintreadInt16(int[]bufInt){
- inti=0;
- for(intj=0;j<2;readArrayIndex++,j++){
- i+=bufInt[readArrayIndex]<<(j<<3);
- }
- returni;
- }
- privatestaticlongreadInt32(int[]bufInt){
- longi=0;
- for(intj=0;j<4;readArrayIndex++,j++){
- i+=bufInt[readArrayIndex]<<(j<<3);
- }
- returni;
- }
下面的例子申明,c#和Java固然十分相像,可是一些关头细节的分歧是必要细心思索的。
C#中有两处地方用到new关键字,第一处也是最常见的一处是用在调用构造函数的时候,这种情况也是大家见的最多的一种。另一处是用在派生类中,作用有隐藏成员,切断继承关系等,相信第二处的用法大家明显要比第一处生疏。 |
|