mt2503MTK默认的AT CMD Name到内部数字id是怎样匹配的
时间:10-02
整理:3721RD
点击:
[DESCRIPTION]
怎样计算AT指令定义中EXTEND_CMD("cpas", ?, ?, ...)中的HASH值? 请以cpas指令为例,详细说明下计算方法。
[SOLUTION]
这一块并不是HASH算法,仅仅是一个匹配。
方法是:
1 将字符'a', 'b', ... ,'z''0', '1', '2', . .. , '9' 分别对应到数字1,2,3,...,10,11,12,13,...,36 我们记此关系为f(c) = n.其中c是字符,n是对应的数字。
2 将对应at cmd的名称看作一个char[n], 则其计算出来的值value的算法是:
value = 0; value1 = 0; value2 = 0;
if( n<=5) {
for(i=0, i<n, i++)
{ value1 += f(char) * pow(38,i); }
}else
{
for(i=0, i<5, i++)
{ value1 += f(char) * pow(38,i); }
for(i=5, i<n, i++)
{ value1 += f(char) * pow(38,i-5); }
}
value = value1+value2;
举例1:cpas分别对应到3,16,1,19,则value = 3* 38^3+16*38^2 +1*38+19 =187777.
举例2:for AT+ABCDEFGH
hash_value1 = hash(A)*38^4 + hash(B)*38^3 + hash(C)*38^2 + hash(D)*38^1 +hash(E)*38^0 *
= ((((hash(A)+0)*38 + hash(B))*38 + hash(C))*38 + hash(D))*38 + hash(E)
hash_value2 = hash(F)*38^2 + hash(G)*38^1 + hash(H)*38^0 * = ((hash(F) +0)*38 + hash(G))*38 + hash(H)
hash_value = hash_value1 + hash_value2
怎样计算AT指令定义中EXTEND_CMD("cpas", ?, ?, ...)中的HASH值? 请以cpas指令为例,详细说明下计算方法。
[SOLUTION]
这一块并不是HASH算法,仅仅是一个匹配。
方法是:
1 将字符'a', 'b', ... ,'z''0', '1', '2', . .. , '9' 分别对应到数字1,2,3,...,10,11,12,13,...,36 我们记此关系为f(c) = n.其中c是字符,n是对应的数字。
2 将对应at cmd的名称看作一个char[n], 则其计算出来的值value的算法是:
value = 0; value1 = 0; value2 = 0;
if( n<=5) {
for(i=0, i<n, i++)
{ value1 += f(char) * pow(38,i); }
}else
{
for(i=0, i<5, i++)
{ value1 += f(char) * pow(38,i); }
for(i=5, i<n, i++)
{ value1 += f(char) * pow(38,i-5); }
}
value = value1+value2;
举例1:cpas分别对应到3,16,1,19,则value = 3* 38^3+16*38^2 +1*38+19 =187777.
举例2:for AT+ABCDEFGH
hash_value1 = hash(A)*38^4 + hash(B)*38^3 + hash(C)*38^2 + hash(D)*38^1 +hash(E)*38^0 *
= ((((hash(A)+0)*38 + hash(B))*38 + hash(C))*38 + hash(D))*38 + hash(E)
hash_value2 = hash(F)*38^2 + hash(G)*38^1 + hash(H)*38^0 * = ((hash(F) +0)*38 + hash(G))*38 + hash(H)
hash_value = hash_value1 + hash_value2
看下!
管理员每日总结,感觉好丰富啊
多谢分享
thanks for your help...thanks for your help
这样好不好
You are welcome