【问题标题】:Can I store a big hexadecimal value in Long datatype in Java? [duplicate]我可以在 Java 中的 Long 数据类型中存储一个大的十六进制值吗? [复制]
【发布时间】:2018-02-02 11:25:36
【问题描述】:

Mac 地址长度为 6 字节(长度为 12 位或 48 位)。 Long 可以保存 8 个字节的数据,但我仍然无法将以下 mac 地址存储在 long 数据变量中?

Long mac=(long) 0xffffffffffff;

为什么会这样? 存储mac地址数据类型的最佳数据类型是什么(我想以base10格式存储)?

【问题讨论】:

  • 你需要在末尾加上'l'/'L'表示它是一个长整数,否则它将被解释为普通的int数据
  • @JordiCastilla 这似乎与您指出的问题不重复。
  • @khelwood 可能不一样,但恕我直言,它更广泛,包括这个问题的解决方案......无论如何,你可以投票重新打开它,看看社区的想法,我没有最终或真实的话,但我不能在没有结束问题的情况下在 java 中投票为重复......

标签: java int long-integer mac-address


【解决方案1】:

您必须通过在末尾添加 L 来将其定义为 Long 值:

Long mac = 0xffffffffffffL;

您可以在Java SE Spec (3.10.1. Integer Literals) 中找到有关L 的更多信息。

【讨论】:

  • 所以投射到 long 不起作用还是什么?
  • 您不需要转换为 Long,因为您已经通过附加 L 将其定义为 Long
  • @DJ 问题是“什么”你要长?从原始语句中,您正在转换一个 int 值。但是,该值对于 int 数据类型来说太大了。因此例外。
【解决方案2】:

您使用的不是long 值,而是int。只需将L 添加到您的号码

Long mac= 0xffffffffffffL;

引用甲骨文

如果整数字面量以字母 L 或 l 结尾,则它是 long 类型; 否则它是 int 类型。建议您使用鞋面 大写字母 L,因为小写字母 l 难以区分 从数字 1 开始。

至于您的问题,关于选择哪种数据类型,任何一种都可以,只要它拥有必要的 48 位。

值得注意的是,java 返回一个字节数组以获取NetworkInterface#getHardwareAddress 中的硬件地址,但声明它“通常”是一个 mac 地址。

【讨论】:

  • 类型转换为 long 有点多余。
  • @archilius 编辑感谢
猜你喜欢
  • 2014-12-24
  • 2011-11-26
  • 2013-10-17
  • 2015-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-13
  • 1970-01-01
相关资源
最近更新 更多