C多个数据类型传递给同一个函数

时间:2017-10-28 14:23:31

标签: c function types bit-manipulation

我有这个函数将int *作为参数并将其第n位更改为1或0

    df = pd.DataFrame({'EmployeeID':[random.sample(range(123456,135000),100)]})

我可以保证它的工作原理可能是类型:

  • * uint8_t
  • *炭
  • * uint16_t

或者我应该为每种数据类型创建一个函数吗?

2 个答案:

答案 0 :(得分:3)

你不能使用单一功能,你需要多个功能。

否则,访问(*value),它是一个指向uint8_t对象的整数指针,即

// This code is broken
unit8_t val = 0xC4;
change_nth_bit((int*)&val, 3, 1);
//             ^^^^^^
//               |
// Invalid ------+

会导致未定义的行为。

请注意,如果将此代码放在宏中(在用宏参数引用替换指针之后),您应该能够在不重复代码的情况下获得所需的结果:

#define CHANGE_NTH_BIT(v,b,n) (v) ^= (-(b) ^ (v)) & (1U << (n))

答案 1 :(得分:1)

假设指针为安全(在大多数系统上)和小端

void cnb(void *val, size_t bit, int value)
{
   uint8_t *ptr = val;

   ptr += bit >> 3;
   if(val) *ptr |= (!!val) << (bit & 7);
      else *ptr &= ~((!!val) << (bit & 7));
}

https://godbolt.org/g/HBEKme