我正在構建一個函數,它將一個無符號的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