|
13 | 13 | import java.util.List; |
14 | 14 | import java.util.Locale; |
15 | 15 | import java.util.Objects; |
| 16 | +import java.util.Optional; |
16 | 17 | import java.util.concurrent.ConcurrentHashMap; |
17 | 18 | import java.util.logging.Level; |
18 | 19 | import java.util.logging.Logger; |
@@ -223,36 +224,46 @@ private static String formatNumber(final Number value, final Display display, |
223 | 224 | if (option == FormatOption.HEX) |
224 | 225 | { |
225 | 226 | final StringBuilder buf = new StringBuilder(); |
226 | | - long longValue; |
| 227 | + Optional<Long> maybeLongValue; |
227 | 228 | if (value instanceof Byte valueByte) { |
228 | | - longValue = Byte.toUnsignedLong(valueByte); |
| 229 | + maybeLongValue = Optional.of(Byte.toUnsignedLong(valueByte)); |
229 | 230 | } else if (value instanceof Short valueShort) { |
230 | | - longValue = Short.toUnsignedLong(valueShort); |
| 231 | + maybeLongValue = Optional.of(Short.toUnsignedLong(valueShort)); |
231 | 232 | } else if (value instanceof Integer valueInt) { |
232 | | - longValue = Integer.toUnsignedLong(valueInt); |
| 233 | + maybeLongValue = Optional.of(Integer.toUnsignedLong(valueInt)); |
233 | 234 | } else if (value instanceof Long valueLong) { |
234 | | - longValue = valueLong; |
| 235 | + maybeLongValue = Optional.of(valueLong); |
235 | 236 | } else if (value instanceof Float valueFloat) { |
236 | | - longValue = valueFloat.longValue(); |
| 237 | + maybeLongValue = Optional.of(valueFloat.longValue()); |
237 | 238 | } else if (value instanceof Double valueDouble) { |
238 | | - longValue = valueDouble.longValue(); |
| 239 | + maybeLongValue = Optional.of(valueDouble.longValue()); |
239 | 240 | } else if (value instanceof UByte valueUByte) { |
240 | | - longValue = valueUByte.longValue(); |
| 241 | + maybeLongValue = Optional.of(valueUByte.longValue()); |
241 | 242 | } else if (value instanceof UShort valueUShort) { |
242 | | - longValue = valueUShort.longValue(); |
| 243 | + maybeLongValue = Optional.of(valueUShort.longValue()); |
243 | 244 | } else if (value instanceof UInteger valueUInteger) { |
244 | | - longValue = valueUInteger.longValue(); |
| 245 | + maybeLongValue = Optional.of(valueUInteger.longValue()); |
245 | 246 | } else if (value instanceof ULong valueULong) { |
246 | | - longValue = valueULong.longValue(); |
| 247 | + maybeLongValue = Optional.of(valueULong.longValue()); |
247 | 248 | } else { |
248 | | - longValue = value.longValue(); |
| 249 | + maybeLongValue = Optional.empty(); |
249 | 250 | } |
250 | | - String hexString = Long.toHexString(longValue); |
251 | | - buf.append(hexString.toUpperCase()); |
252 | | - for (int i=buf.length(); i<precision; ++i) |
253 | | - buf.insert(0, '0'); |
254 | | - buf.insert(0, "0x"); |
255 | | - return buf.toString(); |
| 251 | + |
| 252 | + if (maybeLongValue.isPresent()) { |
| 253 | + long longValue = maybeLongValue.get(); |
| 254 | + String hexString = Long.toHexString(longValue); |
| 255 | + buf.append(hexString.toUpperCase()); |
| 256 | + for (int i=buf.length(); i<precision; ++i) |
| 257 | + buf.insert(0, '0'); |
| 258 | + buf.insert(0, "0x"); |
| 259 | + return buf.toString(); |
| 260 | + } else { |
| 261 | + String numberFormat = value.getClass().getSimpleName(); |
| 262 | + Logger.getLogger(FormatOptionHandler.class.getPackageName()) |
| 263 | + .log(Level.WARNING, "Error: Number format is unsupported for conversion to HEX format: " + numberFormat); |
| 264 | + return "ERROR: Unsupported number format: " + numberFormat; |
| 265 | + } |
| 266 | + |
256 | 267 | } |
257 | 268 | if (option == FormatOption.STRING) |
258 | 269 | return new String(new byte[] { value.byteValue() }); |
|
0 commit comments