请哪位大神指教一下下面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));
}
}
展开
 我来答
johnwanz
2018-05-08 · TA获得超过781个赞
知道小有建树答主
回答量:716
采纳率:80%
帮助的人:232万
展开全部
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;
没有足够的资讯, 无法解释. 看起来是取值, 塞到某个输出封包的特定栏位.
追问
首先 , 谢谢大大的回答 ; 请看看下面的整个方法:
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
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式