【问题标题】:Integer with range from 0 to 255整数,范围从 0 到 255
【发布时间】:2013-12-27 06:58:39
【问题描述】:

我想声明一个4个整数的结构,每个整数只能从0到255。有没有办法呢?目前,我通过检查输入(在输入函数中)来做到这一点。

struct
{ 
    int num1;
    int num2;
    int num3;
    int num4;
} ip;

【问题讨论】:

  • 请用您使用的语言标记并分享相关代码。
  • @StephenC:C 中没有“字节”类型
  • 给老兄穿件衬衫! ;-)

标签: c struct integer ip


【解决方案1】:

好吧,您可以使用unsigned char(或者,更好的是uint8_t),但这并不意味着您可以停止检查输入。这取决于您的要求。如果我输入256 会发生什么?溢出好吗?

附带说明,sizeof(char) 定义为 1,但一个字节未定义为 8 位。在大多数硬件上你会很好,但出于这个原因,使用uint8_t 会更好。

【讨论】:

  • 我可以直接存储一个整数值吗?例如:blablabla->num1 = 1;行得通吗?
  • @NguyễnDuy 是的。但作为 EdS。说,你需要考虑如何 blablabla->num = 256;应该处理,特别是如果 256 来自输入。
  • 是的,我明白了。附带问题。我怎样才能在 Java 中做同样的事情?因为我不认为 Java 让你声明一个 unsigned char ,是吗?
  • @NguyễnDuy:Java 没有无符号字节,因此您将使用 int 并且必须使用 & 0xFF
  • @NguyễnDuy:int myUnsignedByte = input & 0xFF。请注意,这条线将简单地剪辑,即,如果我输入12345,结果将是255
【解决方案2】:

是的,您可以为此使用位域类型:

struct ip 
{
    unsigned num1 : 8;
    unsigned num2 : 8;
    unsigned num3 : 8;
    unsigned num4 : 8;
};

【讨论】:

  • 谢谢。我怎样才能为 Java 做同样的事情?
  • 我不确定在 Java 中执行此操作的惯用方式 - 也许是一个将提供的数字限制在所需范围内的 setter 函数?
  • @NguyễnDuy:如果你对 java 这么感兴趣,那你为什么要问 C 的问题呢?
  • @EdS。因为我需要为 C 和 Java 做同样的事情。
  • -1, WHY 当有一个完全干净的正确方法时,会使用像位域这样可憎的东西?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-19
  • 1970-01-01
  • 2018-09-13
  • 2020-09-29
  • 1970-01-01
相关资源
最近更新 更多