Adobe Flex: как преобразовать UID в шестнадцатеричную строку?

Мне нужно преобразовать UID, например «ff5ac81c-fc51-9442-b993-60cff48c6b39», в шестнадцатеричную строку во Flex. В С# я могу использовать параметр формата следующим образом:

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();
}

Как я могу сделать это в сценарии действия?


person LKa    schedule 27.08.2012    source источник
comment
Вы просите нас преобразовать этот код для вас? Или хотите, чтобы мы описали вам алгоритм? Или что-то другое?   -  person JeffryHouser    schedule 27.08.2012
comment
Сначала преобразовать код. Если я знаю, что происходит внутренне в методе appendFormat с параметром {0:x2} - даже лучше   -  person LKa    schedule 27.08.2012
comment
Я тоже не знаю, что происходит; но я не уверен, почему вы не можете погуглить и понять, что делает этот метод. Это то, что я должен сделать.   -  person JeffryHouser    schedule 27.08.2012
comment
искал несколько часов... ничего не нашел   -  person LKa    schedule 27.08.2012
comment
Вот документы по StringBuilder.AppendFormat: msdn.microsoft.com/en-us/library/ . Это должно дать вам отправную точку.   -  person JeffryHouser    schedule 27.08.2012


Ответы (1)


В MSDN я не нашел ничего, что могло бы мне помочь. На другой странице я нашел пример, где байтовый массив был преобразован в 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 преобразовывался в правильный формат. Надеюсь, кто-нибудь сможет мне это объяснить.

person LKa    schedule 28.08.2012