преобразовать значение xs: float в шестнадцатеричное представление его двоичного значения - PullRequest
0 голосов
/ 23 июня 2009

Используя xsl 2.0, как бы вы преобразовали значение xs: float в шестнадцатеричное представление его двоичного значения? у меня нет проблем сделать это для целого числа (разделить на 16 рекурсивно и объединить символы 0-9A-F), но float / double ставит меня в тупик.

<xsl:function name="my:float-to-hex" as="xs:string">
    <xsl:param name="in" as="xs:float"/>
    <xsl:sequence select="magic-here($in)"/>
</xsl:function>

Допустимым ответом может быть то, что «это невозможно», и это было бы полезно для меня, если бы это было правдой. Я открыт для других предложений, но, пожалуйста, не отходите от XSL. Я полностью осознаю, что есть несколько способов снять шкуру с этой кошки.

Чтобы уточнить, ожидаемый результат будет таким же, как выход из этого кода C:

float f = 28.25f;
char *ptr = &f;
for(int i = 0; i < sizeof(float); i++) { printf("%02X", *(ptr + i)); }

стороннее редактирование

1 Ответ

0 голосов
/ 23 июня 2009

Я бы вышел на конечность и сказал, что это невозможно в vanilla XSLT. Имея доступ к определяемым пользователем функциям расширения, легко передать его на другой язык, который лучше подходит, как вы уже указали magic-here($in).

Я не думаю, что в XSLT есть способ преобразовать число в байтовый массив. Я не могу указать на соответствующий раздел в спецификации, чтобы доказать это, хотя. Может быть, кто-то еще выкопает правильный абзац.

Предполагается, что XSLT является детерминированным и не имеет побочных эффектов, и поэтому маловероятно, что он обеспечит собственный способ доступа к конкретным деталям реализации, таким как внутреннее представление чисел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...