Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于十六进制代码的Java模式_Java_Android_Hex_Design Patterns_Mms - Fatal编程技术网

基于十六进制代码的Java模式

基于十六进制代码的Java模式,java,android,hex,design-patterns,mms,Java,Android,Hex,Design Patterns,Mms,我有以下要解析的十六进制代码。对于好奇的人,这是一个彩信包 e306246170706c69636174696f6e2f766e642e7761702e6d6d732d6d65737361676500af84b4818c82986e323333426178773042737549684d008d918918802b33333631313131313131312f545950453d504c4d4e0086818a808e02271088058103093a8083687474703a2f2f77

我有以下要解析的十六进制代码。对于好奇的人,这是一个彩信包

e306246170706c69636174696f6e2f766e642e7761702e6d6d732d6d65737361676500af84b4818c82986e323333426178773042737549684d008d918918802b33333631313131313131312f545950453d504c4d4e0086818a808e02271088058103093a8083687474703a2f2f772e732f6158585842737549684d00
详细版本如下:

e3 // Wsp transactionId
06 // Push type
24 // Length of the content type field and headers
6170706c69636174696f6e2f766e642e7761702e6d6d732d6d657373616765 // application/vnd.wap.mms-message 
00 // Null terminated
af84 // X-Wap-Application-ID
b481 // ?
8c82 // X-MMS-Message-Type:m-notification-ind 
986e323333426178773042737549684d00 // Transaction id random with seed
8d // MMS version
91 // 1.1
89 // From
18 // Length of from
80 // Address present
2b3333363131313131313131 // Sender phone number
2f545950453d504c4d4e // /TYPE=PLMN
00 // Null terminated
8681
8a // Message class
80 // Personnal (81=Ad, 82=Informational, 83=Auto)
8e // Message size
02 // Size will be coded on 2 bytes
2710 // 10000 bytes
88 // X-Mms-Expiry
05 // Field size
81 // Relative date format
03 // Time will be coded on 3 bytes
093a80 // Seconds
83 // X-MMS-Content-Location 
687474703a2f2f772e732f6158585842737549684d // Url to the server
00 // Null terminated
我需要在我的十六进制代码中获取电话号码
2B33336313131313131
,以及服务器的url
687474703A2F2F772E732F615858484737549684D
。 我在用Java为Android工作。我几乎肯定我需要使用这个模式,但我不明白它是如何工作的

我已经完成了以下代码(显然不起作用):

  • 电话号码模式:

    String number = hexCode.replace("^89([a-f0-9])00$", "$1");
    number = number.substring(6, number.length() - 22);
    // Number should be equal to 2b3333363131313131313131
    
  • Url模式

     String url = hexCode.replace("^83([a-f0-9])00$", "$1");
     url = url.substring(2, url.length() - 2);
     // Url should be equal to 687474703a2f2f772e732f6158585842737549684d
    
你能帮我把这些图案弄好吗

编辑: 我可以在没有模式的情况下完成这项工作,但我认为这不是最好的解决方案

// Try to find the pattern "http"
if (pduS.indexOf("68747470") > -1)
{
    String url = pduS.substring(pduS.indexOf("68747470"), pduS.length() - 2);
    Log.e(">>>>>>", "Url: " + convertHexToString(url));
}

// Try to find the pattern "/TYPE=PLMN"
if (pduS.indexOf("2b") > -1 && pduS.indexOf("2f545950453d504c4d4e") > -1)
{
    String shortPdu = pduS.substring(0, pduS.indexOf("2f545950453d504c4d4e"));
    String number = pduS.substring(shortPdu.lastIndexOf("2b"), pduS.indexOf("2f545950453d504c4d4e"));
    Log.e(">>>>>>", "Number: " + number);
    Log.e(">>>>>>", "Number: " + convertHexToString(number));
}

如果有人需要我的问题的答案,请使用以下模式:

Number: ^2b[0-9abcdefABCDEF]+2f545950453d504c4d4e$
Url: ^68747470[0-9abcdefABCDEF]+00$
以下是彩信Pdu的应用程序:

public String getNumber(String pduString)
{
    Pattern p = Pattern.compile("^2b[0-9abcdefABCDEF]+2f545950453d504c4d4e$");
    Matcher m = p.matcher(pduString);
    return m.find() ? m.group(1) : "";
}

public String getUrl(String pduString)
{
    Pattern p = Pattern.compile("^68747470[0-9abcdefABCDEF]+00$");
    Matcher m = p.matcher(pduString);
    return m.find() ? m.group(1) : "";
}
请让我知道,如果你有任何问题与此代码


PS:您可能需要将
+
添加到号码中,才能以国际格式获取该号码,并将
http://
添加到url。

电话号码和
url
的位置是否始终固定?请在此处尝试此答案。这不是一个精确的解决方案,但有效。这些部分是不固定的。这就是为什么需要这个模式。为什么不从左到右解析整个代码,将其包装在一个类中,然后使用您需要的任何数据部分呢?解析就是我要问的。。。