关键词Byte相关知识与实用类的深入理解(流操作,加密处理,图像处理等的基础准备)
Byte,long,int,short,char,
( 1 )Byte的解说:
byte 关键字代表一种整型,该类型按下表所示存储值:
类型 范围 大小 .NET Framework 类型
byte
0 到 255
无符号 8 位整数
System.Byte
标识符
可如下例所示声明并初始化 byte 类型的变量:
byte myByte = 255;
在以上声明中,整数 255 从 int 隐式转换为 byte。如果整数超出了 byte 的范围,将产生编译错误。
转换
存在从 byte 到 short、ushort、int、uint、long、ulong、float、double 或 decimal 的预定义隐式转换。
不能将更大存储大小的非文本数值类型隐式转换为 byte。有关整型的存储大小的更多信息,请参见整型表(C# 参考)。例如,请看以下两个 byte 变量 x 和 y:
byte x = 10, y = 20; (会出错,因为该非文本数值类型存储大小大于byte)
以下赋值语句将产生一个编译错误,原因是赋值运算符右侧的算术表达式在默认情况下的计算结果为 int 类型。
// Error: conversion from int to byte:
byte z = x + y;
若要解决此问题,请使用强制转换:
// OK: explicit conversion:
byte z = (byte)(x + y);
但是,在目标变量具有相同或更大的存储大小时,使用下列语句是可能的:
int x = 10, y = 20;
int m = x + y; (正确,因为int类型存储大小大于int)
long n = x + y; (正确,因为long类型存储大小大于int)
同样,不存在从浮点型到 byte 类型的隐式转换。例如,除非使用显式强制转换,否则以下语句将生成一个编译器错误:
// Error: no implicit conversion from double:
byte x = 3.0;
// OK: explicit conversion:
byte y = (byte)3.0;
调用重载方法时,必须使用显式转换。以下面使用 byte 和 int 参数的重载方法为例:
public static void SampleMethod(int i) {}
public static void SampleMethod(byte b) {}
使用 byte 强制转换可保证调用正确的类型,例如:
// Calling the method with the int parameter:
SampleMethod(5);
// Calling the method with the byte parameter:
SampleMethod((byte)5);
( 2 )byte的实例
1.
把char类型转换成两个byte,第一个比特存unicode的第一个字节,第二个存unicode的第二个字节:
char a='a12335';
string s=Convert.ToString(a);
byte[] b=System.Text.Encoding.Unicode.GetBytes(s);//转为byte数组
2.
怎样把byte转换为char*类型的:
CString tt;
BYTE buf[100];
tt.Format(_T("%s"),buf);
char * kk=tt.GetBuffer(tt.GetLength());
上面是可以的
或者你也可以用strcpy.
3.
byte相关的处理类
一个处理BYTE和其它类型转换的类:
public class Tools{
//16进制
private static String HexCode[] = {
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
"a", "b", "c", "d", "e", "f"
};
private Tools(){
}
//将byte类型转换为16进制字符串
public static String byteToHexString(byte b){
int n = b;
if(n < 0)
n = 256 + n;
int d1 = n / 16;
int d2 = n % 16;
return HexCode[d1]+HexCode[d2];
}
//将byte数组转换为16进制字符串
public static String byteArrayToHexString(byte b[]){
String result = "";
for(int i = 0; i < b.length; i++)
result = result+byteToHexString(b[i]); ( 字符串并,注:不同于算术加 )
return result;
}
//将byte数组第offset个元素起的4个字节转换为int值
public static int byte2int(byte b[], int offset)
{
return b[offset + 3] & 0xff | (b[offset + 2] & 0xff) << 8 | (b[offset + 1] & 0xff) << 16 | (b[offset] & 0xff) << 24;
}
//将byte数组转换为int值
public static int byte2int(byte b[])
{
return b[3] & 0xff | (b[2] & 0xff) << 8 | (b[1] & 0xff) << 16 | (b[0] & 0xff) << 24; ( << 位左移;假如传入1234式中可以看出 b[0] 为1, b[1] 为2, b[2] 为3, b[3] 为4, 返回的目标结果为:1234 ;从类byte2int,byte2long可以看出int为4个byte的长度, long为8个byte的长度, short为2个byte的长度)
}
//将byte数组转为long值
public static long byte2long(byte b[])
{
return (long)b[7] & (long)255 | ((long)b[6] & (long)255) << 8 | ((long)b[5] & (long)255) << 16 | ((long)b[4] & (long)255) << 24 | ((long)b[3] & (long)255) << 32 | ((long)b[2] & (long)255) << 40 | ((long)b[1] & (long)255) << 48 | (long)b[0] << 56;
}
//将byte数组第offset个元素起的8个字节转为long值
public static long byte2long(byte b[], int offset)
{
return (long)b[offset + 7] & (long)255 | ((long)b[offset + 6] & (long)255) << 8 | ((long)b[offset + 5] & (long)255) << 16 | ((long)b[offset + 4] & (long)255) << 24 | ((long)b[offset + 3] & (long)255) << 32 | ((long)b[offset + 2] & (long)255) << 40 | ((long)b[offset + 1] & (long)255) << 48 | (long)b[offset] << 56;
}
//将int类型转为byte数组
public static byte[] int2byte(int n)
{
byte b[] = new byte[4];
b[0] = (byte)(n >> 24);
b[1] = (byte)(n >> 16);
b[2] = (byte)(n >> 8);
b[3] = (byte)n;
return b;
}
/**
*n 为待转数据,buf[]为转换后的数据,offset为buf[]中转换的起始点
* 转换后数据从低到高位
*/
public static void int2byte(int n, byte buf[], int offset)
{
buf[offset] = (byte)(n >> 24);
buf[offset + 1] = (byte)(n >> 16);
buf[offset + 2] = (byte)(n >> 8);
buf[offset + 3] = (byte)n;
}
public static byte[] short2byte(int n)
{
byte b[] = new byte[2];
b[0] = (byte)(n >> 8);
b[1] = (byte)n;
return b;
}
public static void short2byte(int n, byte buf[], int offset)
{
buf[offset] = (byte)(n >> 8);
buf[offset + 1] = (byte)n;
}
public static byte[] long2byte(long n)
{
byte b[] = new byte[8];
b[0] = (byte)(int)(n >> 56);
b[1] = (byte)(int)(n >> 48);
b[2] = (byte)(int)(n >> 40);
b[3] = (byte)(int)(n >> 32);
b[4] = (byte)(int)(n >> 24);
b[5] = (byte)(int)(n >> 16);
b[6] = (byte)(int)(n >> 8);
b[7] = (byte)(int)n;
return b;
}
public static void long2byte(long n, byte buf[], int offset)
{
buf[offset] = (byte)(int)(n >> 56);
buf[offset + 1] = (byte)(int)(n >> 48);
buf[offset + 2] = (byte)(int)(n >> 40);
buf[offset + 3] = (byte)(int)(n >> 32);
buf[offset + 4] = (byte)(int)(n >> 24);
buf[offset + 5] = (byte)(int)(n >> 16);
buf[offset + 6] = (byte)(int)(n >> 8);
buf[offset + 7] = (byte)(int)n;
}
}
*************************************************************************************
byte[] b = {00,00,00,00};
int i = ((b[0] << 24) + (b[1] << 16) + (b[2] << 8) + (b[3] << 0));
System.out.println(i);
System.out.println(Integer.parseInt(new String(b,0,4)));
结果:
都是由BYTE[]转换为INT,但
第一条打印语句得到结果:0
第二条出错,因为new String(b,0,4)为" "
原因如下:
(1)每四个byte可转换成一个int,因为int=4 byte
取出4个byte
int i = (int)b[0] | ((int)b[1] << 8) | ((int)b[2] << 16) | ((int)b[3] << 24);
上面用的是+
(2)0转换为字符串是\0,把二进制零转不成字符串的,因为\0是不可见的
分享到:
相关推荐
通用图像处理系统ImageSys是一套大型专业图像处理软件,安装试用版后可以体会专业图像处理软件的魅力。 4. \动态图像处理 介绍北京现代富博科技有限公司的二维、三维动态图像处理软件系统。 有以下数字图像处理方法...
byte数组操作的工具类,支持byte数组转int,int转byte数组,byte数组转short,short转byte数组。。。 下载的人多了,csdn会自动涨分,现在可以手动调了,我给降到最低了
包含MD5加密,同时拥有多种方式进行byte或者byte[]与16进制相互转换 三种方式: 方式一:Integer.toHexString(int) 对应的是: Integer.parseInt(String, int)或者Integer.valueOf(String, int) 方式二:位运算(& ...
实现汉字转换成byte[]类型后,转成二进制加密,再解密成string类型,再转成byte[]类型,再转成汉字输出!适用于网络传输协议,提高被拦截的安全性!希望对大家有所帮助
非常方便的字节操作插件 可用于网络消息解包压包,字节组装 流协议传输
用于java,byte与各种对象的转换,Integer、short、hex、string
C#中将byte数组转换为8bit灰度图像
本资源是集合了SMS4和自定义的Base64加密算法。SMS4加密算法中提供了如下接口: private static byte[] encode16(byte[] plain, byte[] key); private static byte[] decode16(byte[] cipher, byte[] key); private ...
C#-字节byte操作,可进行字节替换.字节指定移除.字节处理等
C# 图片转成byte存入,数据库读取byte转成图片的类
系统自用,可把c#的对象存入txt文本或者数据库中 ,供下次直接使用,(double[,],List[]>等之类的对象)
数据的加密与解密 文件的加密与解密 第 章 加密与解密技术 第19章 加密与解密技术 829 19.1 数据的加密与解密 实例571 异或算法对数字进行加密与解密 光盘位置:光盘\MR\19\571 中级 趣味指数: 实 例说明 在实现...
Cstring 与BYTE类型之间转换,实现字节与字符串的转换,将字符串转化为字节类型。0进制与16进制间转换
逻辑单元等效 33,216,在理解图像处理算法并且将算法分解成硬件结构的基础上 采用 FPGA 搭建了一个视频处理系平台,包括视频采集,解码, VGA 显示, JPEG 压缩,直方图工具,噪声处理, SDRAM 控制器
1、把一张图片(png bmp jpeg bmp gif)转换为byte数组存放到数据库。 2、把从数据库读取的byte数组转换为Image对象,赋值给相应的控件显示。 3、从图片byte数组得到对应图片的格式,生成一张图片保存到磁盘上。 ...
软件说明: Grearo字符串加密解密器 功能介绍【必读】: 1,组成:Form1,JiaMiJieMi类 2,加密算法:通过字符串->BYTE流->移位操作(补码)->字符串 3,解密算法:根据可逆性; <br>【注意】本...
128位MD5算法加密Byte数组 32位MD5加密 Base64加密 Base64解密 DES加密/解密类。 加密 加密数据 解密 解密数据 得到随机安全码(哈希加密)。 得到随机哈希加密字符串 哈希加密一个字符串 RSA加密解密及RSA签名和...
后来又传了个新的,叫做“包括私钥加密的RSA密钥生成和加密解密”基于.net Framework 4编,能够生成公钥私钥,直观看到(e,n)和(d,n),能够进行文本及文件加密解密(相关函数输入输出均为byte[],非常好用),...
Go Byte 一个用于在Go中处理常用字节数的工具类
c#中string转换成字节byte的处理方法