• java的byte与C#的异同引起的字符处理问题。


    java的byte是有符号类型(java就没有无符号类型的数据),值域:-0128~127

    c#的byte是无符号类型数值,值域:0~255

    这在依赖字符编码处理程序中,两者源代码就不能通用了。

    知道原因结局办法就容易多了。

    1.使用&与运算 int num1=byte[0]&0xff 与运算一下。

    原理:0xff是十六进制整形(至少16位)在直接转化为整形时是255,相当于0x00ff,其二进制表达为前面8个0,后面8个1.而我们知道任何数值与1与还等于其本身。但是0xff是整形至少16个位,byte只拥有8个位,与0x00ff的与运算就相当于吧byte扩充成至少16位的整形。转换自然就OK了。但是不能用0xffff。这是为什么呢?如果是正数,没有什么问题,其实与0xff与运算分为两步,第一个把byte真实扩充为至少16位的整形,扩充的方式正数前用0填位,负数用1填位。所依负数就有问题了,因为java对于8位的负数(计算机系统负数表达形式用正数的补码标示负数,即正数取反1变0,0变1,然后最后一位加1,这时候负数的第一位肯定是1)扩展位数时时前面是用1填充的,其实就变成0xff[byte]。0xff只是后面8位是1,其实就等于0x00ff,前面是0.与运算之后把负数系统自动扩展的1去掉了,就是一个变成正数了,但是用0xffff,如果是16位的整形,与负数与运算,就会保持不变。如果是32为的整形,就会变成一个更大的值0x0000ff[byte]。

    2.直接加上无符号与有符号的插值。但是这个还要计算一轮始末的情况。

  • 相关阅读:
    ubuntu 16.04 安装PhpMyAdmin
    Python虚拟环境中pip install时没有权限问题
    启动mongodb和redis服务器
    HTML的学习
    awk实战演示
    shell脚本之颜色效果显示以及PS1颜色实战
    linux之在当前目录下按照文件大小进行排序的三种方法
    trap命令的实战用法
    bash的内置字符串处理工具
    ubuntu16.04系统彻底卸载mysql,并源码免编译重装MySQL的步骤
  • 原文地址:https://www.cnblogs.com/edzjx/p/2687419.html
Copyright © 2020-2023  润新知