终于搞掂。负数的补码是原码取反后+1,符号位我不去管他了,对付飞信的颜色正确有效。中间用到了一个
Martin Rowlinson (aka Marrow) 的库numberutils_lib.xsl,这个文件的代码可以在
http://www.topxml.com/code/default.asp?p=3&id=v20020307064151 取得。代码如下:
复制内容到剪贴板
代码:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- 包含数字工具库 -->
<xsl:include href="numberutils_lib.xsl"/>
<!-- ======================================================== -->
<!-- Function: Dec2Color(<DecValue>) => RGB Hex Color -->
<!-- 飞信十进制的颜色换成网页的RBG颜色 -->
<xsl:template name="Dec2Color">
<xsl:param name="DecValue">0</xsl:param>
<xsl:choose>
<xsl:when test="$DecValue < 0">
<xsl:variable name="temp">
<xsl:call-template name="Dec2Hex">
<xsl:with-param name="value" select="number(-$DecValue)" />
<xsl:with-param name="digits" select="number(6)" />
</xsl:call-template>
</xsl:variable>
<xsl:variable name="temp2">
<xsl:value-of select="translate($temp, '0123456789ABCDEF', 'FEDCBA9876543210')" />
</xsl:variable>
<xsl:variable name="temp3">
<xsl:call-template name="Hex2Dec">
<xsl:with-param name="value" select="$temp2" />
</xsl:call-template>
</xsl:variable>
<xsl:variable name="temp4">
<xsl:call-template name="Dec2Hex">
<xsl:with-param name="value" select="number($temp3 + 1)" />
<xsl:with-param name="digits" select="number(6)" />
</xsl:call-template>
</xsl:variable>
<xsl:value-of select="concat('#',substring($temp4,string-length($temp4)-5,6))" />
</xsl:when>
<xsl:otherwise>
<xsl:variable name="temp">
<xsl:call-template name="Dec2Hex">
<xsl:with-param name="value" select="number($DecValue)" />
<xsl:with-param name="digits" select="number(6)" />
</xsl:call-template>
</xsl:variable>
<xsl:value-of select="concat('#',substring($temp,string-length($temp)-5,6))" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>-1 得到 #FFFFFF,-16777216 得到 #000000,正确!