C# short转byte

short占2个字节,byte占1个字节,因而不能直接将short转换成byte,如果强制进行转换,结果可能会不正确。正确的做法是将一个short转为一个byte[]:

short i = 25991;

byte[] b = new byte[2];
b[0] = (byte)((0xff00 & i) >> 8);
b[1] = (byte)(0xff & i);

我们知道,每个Unicode字符占用2个字节,那么按上边的思路将Unicode字符转成byte也就容易了:

char c = '文'; //一个 Unicode 字符
short i = (short)c;
byte[] b = new byte[2];
b[0] = (byte)((0xff00 & i) >> 8);
b[1] = (byte)(0xff & i);

测试发现:short的取值范围为[-32768,32767],将编码大于32767的字符转为short时结果为负数,但不影响转化成byte[]的结果,也可考虑将short转换成ushort。

char c = '文'; //一个 Unicode 字符
ushort i = (ushort)c;
byte[] b = new byte[2];
b[0] = (byte)((0xff00 & i) >> 8);
b[1] = (byte)(0xff & i);


评论: 0 | 引用: 0 | 查看次数: 8386
发表评论
登录后再发表评论!