2012-04-16 2 views
1

この例(Get the organizer's calendar appointment using EWS for Exchange 2010)から、ID文字列をUIDから取得できます。しかし、問題はAndroidで書かれているのではなく、C#です。だから私は文字列を16進数の配列に変換し、Javaの64文字列を基底にする同じメソッドが必要です。どうすれば入手できますか?UID文字列を16進数の配列に変換し、base64文字列のItemIdをAndroidからEWSに送信

private static string GetObjectIdStringFromUid(string id) 
    { 
     var buffer = new byte[ id.Length/2 ]; 
     for (int i = 0; i < id.Length/2; i++) 
     { 
     var hexValue = byte.Parse(id.Substring(i * 2, 2), System.Globalization.NumberStyles.AllowHexSpecifier); 
     buffer[ i ] = hexValue; 
     } 
     return Convert.ToBase64String(buffer); 
    } 

例入力:

00000000F1985146856BD941BA2343776A64673F0700855A223A9715B6468B4D00795E77CAAB00000033E03A0000855A223A9715B6468B4D00795E77CAAB00000034860B0000

出力:

AAAAAPGYUUaFa9lBuiNDd2pkZz8HAIVaIjqXFbZGi00AeV53yqsAAAAz4DoAAIVaIjqXFbZGi00Ae V53yqsAAAA0hgsAAA ==

答えて

1

正しく理解すれば、16進数文字列をJavaのBase64文字列に変換する方法を探しています。

それは簡単Apache Commons Codecライブラリで行うことができます。Java に外部のLibを使用しない

String output = new String(Base64.encodeBase64(Hex.decodeHex(input.toCharArray()))); 
+0

ありがとうございました。それは私のために働いた。 – R4j

+0

偉大な、あなたを大歓迎! –

1

私はthisページのソースコードを使用し、Java以下 にそれを変換している私のコードは

です
public static String decodeHexToBase64(String hexString){ 
    if(hexString.length() %2 !=0){ 
     return null; 
    }else{ 
    int[] binary = new int[hexString.length()/2]; 
     for (int i=0; i<hexString.length()/2; i++) { 
     String h = hexString.substring(i*2, (i*2)+2); 
     binary[i] = Integer.parseInt(h,16);   
     } 

    return convertToBase64(binary); 
    } 
} 


public static String convertToBase64(int[] input){ 
    String base64_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/"; 

    String ret = ""; 
     int i = 0; 
     int j = 0; 
     int[] char_array_3 = new int[3]; 
     int[] char_array_4 = new int[4]; 
     int in_len = input.length; 
     int pos = 0; 

     while (in_len-- > 0) 
     { 
      char_array_3[i++] = input[pos++]; 
      if (i == 3) 
      { 
       char_array_4[0] = (char_array_3[0] & 0xfc) >> 2; 
       char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4); 
       char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6); 
       char_array_4[3] = char_array_3[2] & 0x3f; 

       for (i = 0; (i <4) ; i++) 
        ret += base64_chars.charAt(char_array_4[i]); 
       i = 0; 
      } 
     } 

     if (i > 0) 
     { 
      for (j = i; j < 3; j++) 
       char_array_3[j] = 0; 

      char_array_4[0] = (char_array_3[0] & 0xfc) >> 2; 
      char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4); 
      char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6); 
      char_array_4[3] = char_array_3[2] & 0x3f; 

      for (j = 0; (j < i + 1); j++) 
       ret += base64_chars.charAt(char_array_4[j]); 

      while ((i++ < 3)) 
       ret += '='; 

     } 

     return ret; 



} 
関連する問題