将xs:float值转换为其二进制值的十六进制字符串表示形式

时间:2009-06-22 21:44:00

标签: xml xslt text

使用xsl 2.0,您如何将xs:float值转换为其二进制值的十六进制字符串表示形式?我为这个整数做这个没有问题(递归除以16并连接字符0-9A-F),但是浮点数/双数字让我感到难过。

<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 :(得分:0)

我会说,在香草XSLT中这是不可能的。通过访问用户可定义的扩展功能,可以很容易地将其移植到更适合的某种语言,正如您已经magic-here($in)指出的那样。

我认为XSLT没有办法将数字转换为字节数组。但是,我不能指出规范中的相关部分来证明它。也许别人会挖出正确的段落。

XSLT应该是确定性的,并且副作用是免费的,因此它不太可能提供本地方式来访问特定于内部数字表示的实现特定细节。