请哪位大神指教一下下面C#代码段的意思是什么?
请大神回答仔细,通俗易懂点,谢谢p_byte_out[0]=0x08;p_byte_out[1]=(byte)((p_byte_array[0]-0x30)<<4|0x0...
请大神回答仔细,通俗易懂点 , 谢谢
p_byte_out[0] = 0x08;
p_byte_out[1] = (byte)((p_byte_array[0] - 0x30) << 4 | 0x0a);
整个方法段:
public void m_imei_encode(ref byte[] p_byte_out, byte[] p_byte_array)
{
int i = 0;
p_byte_out[0] = 0x08;
p_byte_out[1] = (byte)((p_byte_array[0] - 0x30) << 4 | 0x0a);
for (i = 2; i < 9; i++)
{
p_byte_out[i]
= (byte)((p_byte_array[2 * i - 2] - 0x30) << 4
| (p_byte_array[2 * i - 3] - 0x30));
}
} 展开
p_byte_out[0] = 0x08;
p_byte_out[1] = (byte)((p_byte_array[0] - 0x30) << 4 | 0x0a);
整个方法段:
public void m_imei_encode(ref byte[] p_byte_out, byte[] p_byte_array)
{
int i = 0;
p_byte_out[0] = 0x08;
p_byte_out[1] = (byte)((p_byte_array[0] - 0x30) << 4 | 0x0a);
for (i = 2; i < 9; i++)
{
p_byte_out[i]
= (byte)((p_byte_array[2 * i - 2] - 0x30) << 4
| (p_byte_array[2 * i - 3] - 0x30));
}
} 展开
1个回答
展开全部
p_byte_out[1] = (byte)((p_byte_array[0] - 0x30) << 4 | 0x0a);
=>
temp = p_byte_array[0];
temp = temp - 0x30; (ASCII数字转数值?)
temp = temp << 4; (low nibble(4bits) -> hi nibble(4bits))
temp = temp | 0x0a; (low nibble = a, hi nibble is p_byte_array[0] vaule)
p_byte_out[1] = temp;
没有足够的资讯, 无法解释. 看起来是取值, 塞到某个输出封包的特定栏位.
=>
temp = p_byte_array[0];
temp = temp - 0x30; (ASCII数字转数值?)
temp = temp << 4; (low nibble(4bits) -> hi nibble(4bits))
temp = temp | 0x0a; (low nibble = a, hi nibble is p_byte_array[0] vaule)
p_byte_out[1] = temp;
没有足够的资讯, 无法解释. 看起来是取值, 塞到某个输出封包的特定栏位.
追问
首先 , 谢谢大大的回答 ; 请看看下面的整个方法:
public void m_imei_encode(ref byte[] p_byte_out, byte[] p_byte_array)
{
int i = 0;
p_byte_out[0] = 0x08;
p_byte_out[1] = (byte)((p_byte_array[0] - 0x30) << 4 | 0x0a);
for (i = 2; i < 9; i++)
{
p_byte_out[i]
= (byte)((p_byte_array[2 * i - 2] - 0x30) << 4
| (p_byte_array[2 * i - 3] - 0x30));
}
}
追答
从函数名称来看, 已经告知是Encode, 对IMEI(通讯模块编号?)进行编码.
所以, 如何编码, 其实要依照 专案或开发者"定义的规格或协议" 来进行编码. 这边其实没有特定标准.
简单的看, 後续2-9就是将ASCII的数字, 进行成对的组合成BCD的格式; 前面只是抓第一位, 并填入填空值0x0A; 整个段落为什麼要这样编, 其实就很难有明确的定义了.
如果是特定的案子, 请查找过往资料有无相关定义, 否则就只能自己将转换过程写成文字记录下来.
ex:
IMEI: 123456789012345
output: 0x08, 0x1A, 0x32, 0x54, 0x76, 0x98, 0x10, 0x32, 0x43
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询