type-punning

    15热度

    4回答

    我试图在编译使用GCC的特定程序时修复两个警告。该警告是: 警告:提领型punned指针将打破 严格走样规则[-Wstrict走样] 和两个罪魁祸首是: unsigned int received_size = ntohl (*((unsigned int*)dcc->incoming_buf)); 和 *((unsigned int*)dcc->outgoing_buf) = htonl (

    3热度

    1回答

    我正在为使用Microchip PIC32 C编译器(基于GCC 3.4)编译的PIC32MX编​​写C语言。 新增我以下的标准是GNU99(C99用GNU扩展,编译器标志-std=gnu99) 我的问题是这样的:我有一个存储无论是在EEPROM或程序中的一些可重新编程的数字数据芯片的闪光。这意味着,当我想存储一个花车,我必须做一些类型双关语: typedef union { int

    6热度

    3回答

    我有一个函数,需要一个无符号长整数*,并且需要将它传递给一个外部函数库,该函数需要一个无符号整数*,并且在这个平台上,unsigned int/long的大小相同。 void UpdateVar(unsigned long* var) { // this function will change the value at the address of var ExternalL

    2热度

    4回答

    这里是我写在64位linux机器上的函数。 void myfunc(unsigned char* arr) //array of 8 bytes is passed by reference { unsigned long a = 0; //8 bytes unsigned char* LL = (unsigned char*) &a; LL[0] = arr[6

    2热度

    3回答

    我有一些代码使用类型双引号来避免必须调用成员“object”的构造函数析构函数,除非/实际上有必要使用该对象。 它工作正常,但在G ++ 4.4.3,我得到这个可怕的编译器警告: [email protected]:~$ g++ -O3 -Wall puns.cpp puns.cpp: In instantiation of ‘Lightweight<Heavyweight>’: puns.c

    4热度

    4回答

    如何使uint8_t,uint16_t,uint32_t,int8_t,int16_t,int32_t和float_t的通用函数如下所示? 我不喜欢在每种情况下重复相同的逻辑,因为你可以看到。每种情况唯一的区别是铸造。 我理想上喜欢一种遵循C标准的便携式解决方案。任何想法都欢迎。 谢谢。 static bool_t IsWithinLimits(const dbKey_t *key, const

    20热度

    4回答

    我想从浮点中提取位而不调用未定义的行为。这是我的第一次尝试: unsigned foo(float x) { unsigned* u = (unsigned*)&x; return *u; } 据我所知,这是不能保证工作,由于严格的别名规则,对吧?如果使用字符指针进行中间步骤,它会工作吗? unsigned bar(float x) { char* c =

    3热度

    1回答

    此代码适用于Microchip的PIC32MX微处理器。他们的编译器基本上是GCC 3.4。 我倾向于使用GCC的__packed__ attribute将位域打包到一个联合体中,稍后将它们检索为unsigned char(即,类型双引号)以通过SPI或I2C发送。这一行为全部由我的实现定义,并且完美地工作。我更喜欢这个到一百行左右的掩码和移位:) 我的问题是:在下面的代码中是否有__packed

    1热度

    1回答

    我将如何将其转换为循环而不使用指针。 byte[] InputBuffer = new byte[8]; unsafe { fixed (byte* pInputBuffer = InputBuffer) { ((long*)pInputBuffer)[0] = value; } } 我想从这个页面中使用的代码:query string paramete

    8热度

    2回答

    在a specific problem后面,自我回答并对其发表评论,我想了解它是否是一个正确的解决方案,解决方法/破解或者纯粹是错误的。 具体而言,我重写代码: T x = ...; if (*reinterpret_cast <int*> (&x) == 0) ... 如: T x = ...; if (*reinterpret_cast <volatile int*> (&x