2012-08-27 17 views
0

我需要將一個UID如'ff5ac81c-fc51-9442-b993-60cff48c6b39'轉換爲Flex中的十六進制字符串。 在C#中,我可以使用的格式參數如下:Adob​​e Flex:如何將UID轉換爲十六進制字符串?

public static string GuidToHex(Guid guid) { 
    return ByteToHex(guid.ToByteArray()); 
} 

public static string ByteToHex(byte[] bytes) { 
    StringBuilder sb = new StringBuilder(bytes.Length * 2); 
    foreach (byte b in bytes) { 
     sb.AppendFormat("{0:x2}", b); 
    } 
    return sb.ToString().ToUpper(); 
} 

我如何能做到這一點在行動腳本?

+0

您是否要求我們爲您轉換該代碼?或者是否希望我們向您描述算法?或者是其他東西? – JeffryHouser

+0

首先轉換代碼。如果我知道appendFormat-Method內部會發生什麼,並帶有參數「{0:x2}」 - 更好 – LKa

+0

我不知道會發生什麼;但我不確定爲什麼你不能谷歌它並找出該方法的作用。那是我必須要做的。 – JeffryHouser

回答

0

在MSDN中我找不到任何東西,什麼會幫助我。在其他頁面上,我找到了一個將bytearray轉換爲HEX字符串的示例。我不得不修改了一點,但現在它的工作原理:

import flash.utils.ByteArray; 

import mx.collections.ArrayCollection; 
import mx.utils.UIDUtil; 

public class RawTypeUtil 
{ 

    private static const hexValues:Array = [ '0', '1', '2', '3', '4', '5', '6', '7', 
              '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' ]; 

    private static const convertSequence:ArrayCollection = new ArrayCollection([ 3, 2, 
                  1, 0, 5, 4, 7, 6, 8, 9, 
                  10, 11, 12, 13, 14, 15 ]); 

    public function RawTypeUtil(lock:Class) 
    { 
     if (lock != RawTypeUtilLock) 
     { 
      throw new Error("Invalid RawTypeUtil access."); 
     } 
    } 

    public static function guidToHex(guid:String) : String 
    { 
     // the UIDUtil expects an uppercase uid... 
     guid = guid.toUpperCase(); 
     if (!UIDUtil.isUID(guid)) 
     { 
      return null; 
     } 

     var bytes:ByteArray = UIDUtil.toByteArray(guid); 
     var hex:String = ""; 

     var byteArray:ArrayCollection = new ArrayCollection(); 
     for (var i:uint = 0; i < bytes.length; i++) 
     { 
      var byte:uint = bytes.readUnsignedByte(); 
      byteArray.addItem(byte); 
     } 

     for (var j:uint = 0; j < convertSequence.length; j++) 
     { 
      var index:uint = convertSequence.getItemAt(j) as uint; 
      var value:uint = byteArray.getItemAt(index) as uint; 
      var l:int = value/16; 
      var r:int = value % 16; 
      hex += hexValues[l] + hexValues[r]; 
     } 

     return hex; 
    } 
} 

我不知道爲什麼我要改變前4個字節,第5和第6和第7和第8的順序是,是的ByteArray以正確的格式轉換。我希望有人能向我解釋這一點。

相關問題