2015-03-22 1 views
1

Как увеличить максимальное шестнадцатеричное число из массива шестнадцатеричных чисел? Мои знания о гексадецимале несколько пятнистые, поэтому любая помощь будет оценена. И, честно говоря, я не знаю, являются ли цифры шестнадцатеричными или нет, потому что перед ними есть «u», но они выглядят так, если вы удалите «u». Значения из документа документа InDesign.Как создать и увеличить число шестнадцатеричных чисел размером 2 или 3 цифры?

Пример:

var anArray = ["uf9","ufc","u111","u112","u136","u137"]; // actual values 

var getUniqueID = getNextHigherNumber(anArray); 

function getNextHigherNumber(anArray) { 
    // sort array 
    // create variable and add one 
    // return variable 
    return variable; 
} 

XML с сервера (смотрите на Себя и Источника):

<Hyperlink Self="ufc" Name="is a multiline hyperlink that terminates here" Source="uf9" Visible="false" Highlight="None" Width="Thin" BorderStyle="Solid" Hidden="false" DestinationUniqueKey="1"> 
    <Properties> 
     <BorderColor type="enumeration">Black</BorderColor> 
     <Destination type="object">HyperlinkURLDestination/http%3a//test.com#1stMultilineLink/</Destination> 
    </Properties> 
</Hyperlink> 
<Hyperlink Self="u112" Name="hyperlink inline" Source="u111" Visible="false" Highlight="None" Width="Thin" BorderStyle="Solid" Hidden="false" DestinationUniqueKey="2"> 
    <Properties> 
     <BorderColor type="enumeration">Black</BorderColor> 
     <Destination type="object">HyperlinkURLDestination/http%3a//test.com</Destination> 
    </Properties> 
</Hyperlink> 
<Hyperlink Self="u137" Name="another multline hyperlink" Source="u136" Visible="false" Highlight="Outline" Width="Thick" BorderStyle="Solid" Hidden="false" DestinationUniqueKey="3"> 
    <Properties> 
     <BorderColor type="enumeration">Purple</BorderColor> 
     <Destination type="object">HyperlinkURLDestination/http%3a//google.com#multilinehyperlink</Destination> 
    </Properties> 
</Hyperlink> 

Более фон:

У меня есть существующий документ XML, который выглядит, как он использует hexidecimal number system для его идентификаторов, и мне нужно иметь возможность создавать уникальный идентификатор для новых узлов. Значения идентификатора похожи на веб-цвета HTML, такие как «0xFF0000» (красный), но разница в том, что он использует 2 или 3 символа вместо 6, например «ufc» или «u112».

Я получаю XML-файл с сервера и имеет узлы, и каждый узел имеет идентификатор с уникальным значением (см. Пример XML выше). Если мне нужно создать новый «элемент», мне нужно создать уникальный идентификатор для него, который еще не используется.

ответ

1

Я думаю, что вы все усложнять, когда мышление шестнадцатеричной;) Вы можете просто преобразовать шестнадцатеричные значения в десятичные те, а затем продолжить то, что вы делаете, так что вы можете сделать так:

var anArray = ['u112', 'u136', 'uf9', 'u137', 'u111', 'ufc']; 

var getUniqueID = getNextHigherNumber(anArray); 

trace('u', getUniqueID); // gives : u138 

function getNextHigherNumber(anArray:Array):String { 
    var max:int = 0; 
    for(var i:int = 0; i<anArray.length; i++){ 
     // convert the hex value to an integer 
     var num:int = int('0x' + String(anArray[i]).substr(1)); 
     // get the max value  
     if(num > max) max = num; 
    } 
    // return the hex value of (max value + 1) 
    return (max + 1).toString(16); 
} 

Надежда, что может Помогите.

3

Прежде всего, шестнадцатеричный - это просто представление числа. Само по себе номер остается неизменным.

Добавление 2, означает, принимает значение этого числа и добавляет значение 2. Шестнадцатеричный - это еще один способ записать число вниз.

Ваши усилия по выяснению того, что эти ценности высоко ценятся, но почему бы не проверить документацию, чтобы знать наверняка?

У вас есть XML, который вы получили с/из InDesign. Просто поиск для меня выбрасывает «IDML», который, кажется, является именем Adobe, выданным в формат, который вы пытаетесь проанализировать.

Adobe предоставляет документ, описывающий этот формат: https://wwwimages2.adobe.com/content/dam/Adobe/en/devnet/indesign/cs55-docs/IDML/idml-specification.pdf

Раздел 10.1.1 об атрибуте собственной личности:

Атрибут самообслуживания содержит уникальный идентификатор для элементов, которые содержат его. Этот идентификатор используется в другом месте в пакете IDML для . Обратитесь к элементу, как описано в разделе «Формат объекта » этой спецификации. Схема Пример 2. Само приписывать Само {XSD: строка}

Как вы можете видеть, значение является строкой, а не число.

На странице 31, вы можете найти описание того, как Adobe создает ценности для Самости, включая это заявление:

Единственное требование значения атрибута Сам является то, что он является уникальным в IDML пакет. Если вы пишете IDML самостоятельно, вам не нужно соблюдать приведенный выше шаблон: вы можете изменить значение атрибута «Я» на значение , если оно уникально. (в пакете IDML) и в качестве поскольку все ссылки на элемент также изменены для соответствия.

1

Вы помечено как JavaScript и ActionScript (я не знаю ActionScript), но код в ваш вопрос выглядит JavaScript для меня, а другой ответ здесь выглядит это в ActionScript; поэтому, если вы все еще хотите сделать это (выглядит как пользователь нуль на что-то), я вывешу эквивалент JavaScript:

var anArray = ["uf9","ufc","u111","u112","u136","u137"]; 

function getNextHigherNumber(theArray) { 
    var maxNum = 0; 
    theArray.forEach(function(num) { 
     num = parseInt(num.substr(1), 16); 
     if(num > maxNum) maxNum = num; 
    }); 
    return 'u' + (maxNum + 1).toString(16); 
} 

// Run the function to see if it works 
console.log(getNextHigherNumber(anArray)); 

Что она делает внутри Foreach функции/цикла:

  • Удалите «u» из каждого элемента массива.
  • Преобразование строки без "u" в ее int десятичный эквивалент.
  • Сохраните номер в maxNum, если текущий номер больше, чем предыдущий сохраненный maxNum.

А потом returns наибольшее число плюс один, конвертируется обратно в шестнадцатеричном через .toString(16) (и предваряя «и» к нему).

+0

Спасибо. ActionScript 3 похож на JavaScript, но с возможностью использования сильных типов, классов и пакетов. Если вы знаете JavaScript, вы можете начать использовать AS3 в тот же день, и вы сможете забрать новые функции AS3 через день или два. –

+0

Полезно знать, да, я заметил типы ответов ActionScript в другом ответе. Я просто немного прочитал об этом, и ActionScript на самом деле теперь является «диалектом» ECMAScript (спецификация JavaScript). Это интересный факт, спасибо. Что касается вашего вопроса, вы в конечном итоге назначаете произвольный идентификатор вашим узлам XML? Просто любопытно. –

+1

Я использовал функцию для перевода всех идентификаторов в документе на целые числа, и все они были последовательно! В этом случае он использовал шестнадцатеричный. Хотя спецификация говорит, что вы можете использовать любое значение, я собираюсь следовать их примеру, поэтому я получаю наивысшие значения из идентификаторов, добавляя один, а затем используя это как новый идентификатор. –

 Смежные вопросы

  • Нет связанных вопросов^_^