我正在构建一个函数,它将一个无符号的int32转换为一个ipv4地址,并且它一切正常,直到我测试范围的上半部分。cffunction/cfargument pass unsigned int32
<cffunction name="Int32ToIPv4" returntype="string" output="false" access="public" hint="returns IPv4 address for int32 number">
<cfargument name="nInt32" type="numeric" required="yes" hint="int32 to convert to ipv4 address">
<cfreturn
bitAnd((arguments.nInt32/16777216), 255) & "."
& bitAnd((arguments.nInt32/65536), 255) & "."
& bitAnd((arguments.nInt32/256), 255) & "."
& bitAnd(arguments.nInt32, 255)
>
</cffunction>
的ColdFusion似乎解释类型= “数字” 是一个签署 32位整数。
这个例子的工作原理:
Int32ToIPv4(nInt32 = 1181772947) = #Int32ToIPv4(nInt32 = 1181772947)# (expected value = 70.112.108.147)<br>
这个例子将失败:
Int32ToIPv4(nInt32 = 3401190660) = #Int32ToIPv4(nInt32 = 3401190660)# (expected value = 202.186.13.4)<br>
的错误信息是:“不能将值3.40119066E9转换为整数,因为它不适合一个整数里面。”
我必须将此数字作为字符串传递并在使用它之前将其转换为Java无符号整数?
我想在ipv6地址(无符号的128位整数)上做点类似的事情。任何建议这种类型的数据类型将不胜感激。
感谢您的解释@leigh。我确实想出了一个纯Java本地解决方案,我将发布评论/信息,但我会将您的答案标记为答案。 –
@Scott - 嘿......我想我们在SO上看到了相同的线索。在我的咖啡开始前,我给了它一个快速(不成功)的旋转,但肯定错过了一些东西。很高兴你知道了:-) – Leigh