Skip to content

Commit fb37c8c

Browse files
committed
CSSTUDIO-3605 Bugfix: Avoid sign extension when converting numbers to the type Long.
1 parent a190d29 commit fb37c8c

File tree

1 file changed

+28
-1
lines changed

1 file changed

+28
-1
lines changed

core/ui/src/main/java/org/phoebus/ui/vtype/FormatOptionHandler.java

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@
1818
import java.util.logging.Logger;
1919

2020
import org.epics.util.array.ListNumber;
21+
import org.epics.util.number.UByte;
22+
import org.epics.util.number.UInteger;
23+
import org.epics.util.number.ULong;
24+
import org.epics.util.number.UShort;
2125
import org.epics.vtype.Display;
2226
import org.epics.vtype.DisplayProvider;
2327
import org.epics.vtype.VBoolean;
@@ -219,7 +223,30 @@ private static String formatNumber(final Number value, final Display display,
219223
if (option == FormatOption.HEX)
220224
{
221225
final StringBuilder buf = new StringBuilder();
222-
long longValue = value.longValue();
226+
long longValue;
227+
if (value instanceof Byte valueByte) {
228+
longValue = Byte.toUnsignedLong(valueByte);
229+
} else if (value instanceof Short valueShort) {
230+
longValue = Short.toUnsignedLong(valueShort);
231+
} else if (value instanceof Integer valueInt) {
232+
longValue = Integer.toUnsignedLong(valueInt);
233+
} else if (value instanceof Long valueLong) {
234+
longValue = valueLong;
235+
} else if (value instanceof Float valueFloat) {
236+
longValue = valueFloat.longValue();
237+
} else if (value instanceof Double valueDouble) {
238+
longValue = valueDouble.longValue();
239+
} else if (value instanceof UByte valueUByte) {
240+
longValue = valueUByte.longValue();
241+
} else if (value instanceof UShort valueUShort) {
242+
longValue = valueUShort.longValue();
243+
} else if (value instanceof UInteger valueUInteger) {
244+
longValue = valueUInteger.longValue();
245+
} else if (value instanceof ULong valueULong) {
246+
longValue = valueULong.longValue();
247+
} else {
248+
longValue = value.longValue();
249+
}
223250
String hexString = Long.toHexString(longValue);
224251
buf.append(hexString.toUpperCase());
225252
for (int i=buf.length(); i<precision; ++i)

0 commit comments

Comments
 (0)