int和byte[]数组转换

虽然天天写程序,牵涉到最基本的整型转字节数组竟然,完全没有头绪了。

所幸有万能的网络帮忙回忆。

要进行转换首先要回忆起这几个概念。

1.不管数字以什么进制表现在我的眼前,在计算机里都是以二进制传输和存储的。

2.byte就是8个bit,byte[]就是很多个连续的byte

那么怎么把一个int放到byte里呢?

很明显把int放到byte里相当于把一根参天大树的树干平均截断了,一个一个放在不同的车厢里。

那么现在就是要找到截断的方法了。

首先,再次清理一下思绪,不管数据是以什么形式出现在眼前,在计算机里都是以二进制形式存在的。

幻想大树的树干被分解成了一个小块一个小块的木头(bit),

每八个木头组成一个byte,就可以放进车厢拉走了。

怎么取得这8个木头呢?

肯定是和bit的操作有关。

于是想到了bit的按位与,按位或,按位异或。

1.按位与的特点:两个同时为1 才返回1.1&1=1,只有这一种情况返回1

2.按位或的特点:两个有一个为1就返回1,只有0&0时才返回0.

3.按位异或的特点:相同为0,相异为1.

在了解这三个操作的基础上,我们要知道我们要得到的是一部分原值,只不过这个值是某部分。

先用与运算试一下,

因为数据的保存都是从低位到高位的,所以要先移位把需要的数据移位到最低的N位,然后把这些数据切出来即可。

刚好,与操作满足这个需求。

于是

 void intToBytes(int value, byte (*pbs)[4], int size)
{
	 // 低位在前
	 for (int i = 0; i < size; ++i)
	 {
		 byte a = (byte)((value >> (/*24- */(i * 8))) & 0xff);
		 (*pbs)[i] = a;
	 }
}

同样如果我们要把byte[]组合成int也要遵循同样的处理规律,即低位在前,

把byte[]数组按照拆分时的顺序反向移位,相加就能得到对应的int值了。

 int bytesToInt(byte bytes[], int size)
 {
	 int value = 0;
	 for (int i = 0; i < size; ++i)
	 {
		 value |= (bytes[i] << (i * 8));
	 }

	 return value;
 }
PS:以上为小端字节序,如果改为大端字节序,你知道怎么处理吗?


猜你喜欢

转载自blog.csdn.net/LightUpHeaven/article/details/80987424
今日推荐