calidion
01/19/2025, 4:19 PMval min = (1u shl 10) + 1u
val max = (1u shl 16) - 1u
return port in min as Int..max as Int
range must use Int instead of UIntYoussef Shoaib [MOD]
01/19/2025, 8:03 PMport
maybe be an Int, and that's why you get an error? Also what version of Kotlin are you using?ephemient
01/19/2025, 11:43 PMport
is an Int
, then do it the other way around:
port.toUInt() in min..max
Klitos Kyriacou
01/20/2025, 12:57 PMmin as Int
You can't do this, because min
is not an Int
. It's a UInt
. The same would happen if min
was a Long
. If you want to turn it into an Int
, you need to do min.toInt()
.calidion
01/20/2025, 2:28 PMport in min..max
.Klitos Kyriacou
01/20/2025, 2:43 PMport in min.toInt()..max.toInt()
Klitos Kyriacou
01/20/2025, 2:45 PMInt
in the first place? They don't go negative since they don't get anywhere close to the most significant bit.
val min = (1 shl 10) + 1
val max = (1 shl 16) - 1
return port in min..max
calidion
01/20/2025, 2:47 PMcalidion
01/20/2025, 2:48 PMKlitos Kyriacou
01/20/2025, 3:08 PMUShort
in Kotlin, whereas you're using UInt
.Klitos Kyriacou
01/20/2025, 3:13 PMfun portIsValid(port: UShort): Boolean {
val min = ((1u shl 10) + 1u).toUShort()
val max = ((1u shl 16) - 1u).toUShort()
return port in min..max
}
You might want to consider doing this for greater type safety:
@JvmInline
value class PortNumber(val value: UShort) {
constructor(value: Int) : this(validate(value))
companion object {
fun validate(value: Int): UShort {
require(value in 0..65535) { "Port number $value outside of valid range." }
return value.toUShort()
}
}
}
fun isValid(port: PortNumber): Boolean {
val min = PortNumber((1 shl 10) + 1)
val max = PortNumber((1 shl 16) - 1)
return port in min..max
}
calidion
01/21/2025, 7:16 AMcalidion
01/21/2025, 7:17 AMcalidion
01/21/2025, 7:20 AMvar a : ULong = 1u
var b: ULong = 10u
var c: ULong = 3u
if(c in a..b) {
println("true")
} else {
println("false")
}
calidion
01/21/2025, 7:20 AMcalidion
01/21/2025, 7:21 AMthey are all types of number
calidion
01/21/2025, 7:24 AMephemient
01/21/2025, 7:25 AMcalidion
01/21/2025, 7:27 AMcalidion
01/21/2025, 7:31 AMcalidion
01/21/2025, 7:32 AMcalidion
01/21/2025, 7:32 AMephemient
01/21/2025, 7:32 AMmin <= port && port <= max
or
port in listOf(min, max)
with different signed/unsigned types, so why should
port in min..max
be any different?calidion
01/21/2025, 7:32 AMvar a : UShort = 1u
var b: UShort = 10u
var c: UShort = 3u
if(c in a..b) {
println("true")
} else {
println("false")
}
this code workscalidion
01/21/2025, 7:33 AMcalidion
01/21/2025, 7:33 AMcalidion
01/21/2025, 7:33 AMcalidion
01/21/2025, 7:34 AMfun port(port: UShort): Boolean {
val min:UInt = (1u shl 10) + 1u
val max:UInt = (1u shl 16) - 1u
return port in min..max
}
ephemient
01/21/2025, 7:34 AMInt
existcalidion
01/21/2025, 7:34 AMcalidion
01/21/2025, 7:35 AMcalidion
01/21/2025, 7:35 AMephemient
01/21/2025, 7:35 AMephemient
01/21/2025, 7:36 AMcalidion
01/21/2025, 7:36 AMephemient
01/21/2025, 7:36 AMcalidion
01/21/2025, 7:36 AMephemient
01/21/2025, 7:37 AMephemient
01/21/2025, 7:38 AMcalidion
01/21/2025, 7:38 AMephemient
01/21/2025, 7:38 AMephemient
01/21/2025, 7:38 AMcalidion
01/21/2025, 7:38 AMcalidion
01/21/2025, 7:38 AMcalidion
01/21/2025, 7:40 AMcalidion
01/21/2025, 7:40 AMcalidion
01/21/2025, 7:41 AMephemient
01/21/2025, 7:41 AMcalidion
01/21/2025, 7:41 AMephemient
01/21/2025, 7:42 AMcalidion
01/21/2025, 7:43 AMcalidion
01/21/2025, 7:49 AMshl
has the same problem only works on some types of number types.calidion
01/21/2025, 7:53 AMfun port(port: UShort): Boolean {
val min:UShort = ((1u shl 10) + 1u).toUShort()
val max:UShort = ((1u shl 16) - 1u).toUShort()
return port in min..max
}
ephemient
01/21/2025, 7:56 AMishl
ishr
iushr
lshl
lshr
lushr
exist. narrower shifts do not exist.calidion
01/21/2025, 7:57 AMephemient
01/21/2025, 7:57 AMephemient
01/21/2025, 7:57 AMcalidion
01/21/2025, 7:58 AMephemient
01/21/2025, 8:00 AMcalidion
01/21/2025, 8:04 AMYoussef Shoaib [MOD]
01/21/2025, 8:05 AMephemient
01/21/2025, 8:05 AMcalidion
01/21/2025, 8:07 AMcalidion
01/21/2025, 8:08 AMephemient
01/21/2025, 8:12 AMcalidion
01/21/2025, 8:12 AMcalidion
01/21/2025, 8:13 AMcalidion
01/21/2025, 8:14 AMephemient
01/21/2025, 8:14 AMephemient
01/21/2025, 8:14 AMcalidion
01/21/2025, 8:14 AMcalidion
01/21/2025, 8:15 AMephemient
01/21/2025, 8:15 AMcalidion
01/21/2025, 8:15 AMcalidion
01/21/2025, 8:16 AMcalidion
01/21/2025, 8:17 AMcalidion
01/21/2025, 8:38 AM