Tag: bytearray

如何在c中进行位设置/字节数组转换

给定一个数组, unsigned char q[32]=”1100111…” , 如何生成一个4字节的位集unsigned char p[4] ,这样,该位集的位等于数组内的值,例如,第一个字节p [0] =“q [ 0] … q [7]“; 第二个字节p [1] =“q [8] … q [15]”等。 以及如何在相反的情况下,即给定位集,生成数组? 我自己的第一部分试用了。 unsigned char p[4]={0}; for (int j=0; j<N; j++) { if (q[j] == '1') { p [j / 8] |= 1 << (7-(j % 8)); } } 以上是对的吗? 有条件要检查吗? 有没有更好的方法? 编辑 […]

比较c中字节数组中的任意位序列

我的c代码中有几个uint8_t数组,我想比较一个和另一个的任意序列位。 例如,我有bitarray_1和bitarray_2,我想比较bitarray_1的bit 13 – 47和bitarray_2的5-39位。 最有效的方法是什么? 目前它是我程序中的一个巨大瓶颈,因为我只是有一个简单的实现,将位复制到新的临时数组的开头,然后在它们上使用memcmp。

如何存储大数字?

我必须在32位电路板上用C进行RSA签名(在状态机上)。 我的内存有限,所以我不能将小数存储在矢量或类似的东西中。 最好的办法是,如果我可以存储位并轻松访问它们; 什么存储方法最好? 我做了这个: #if (CPU_TYPE == CPU_TYPE_32) typedef uint32_t word; #define word_length 32 typedef struct BigNumber { word words[64]; } BigNumber; #elif (CPU_TYPE == CPU_TYPE_16) typedef uint16_t word; #define word_length 16 typedef struct BigNumber { word words[128]; } BigNumber; #else #error Unsupported CPU_TYPE #endif 这似乎很难使用。 我该如何简化它?

C – 字节数组结构(dns查询)

我有这些结构: typedef struct dnsQuery { char header[12]; struct TdnsQuerySection *querySection; } TdnsQuery; typedef struct dnsQuerySection { unsigned char *name; struct TdnsQueryQuestion *question; } TdnsQuerySection; typedef struct dnsQueryQuestion { unsigned short qtype; unsigned short qclass; } TdnsQueryQuestion; 我从recvfrom有字节数组的dns查询。 我试图从字节数组获取结构,如下所示: TdnsQuery* dnsQuery = (TdnsQuery*)buf; printf(“%u”, dnsQuery->querySection->question.qtype); 为什么我得到错误解除指向不完整类型的指针? 我这样做了吗? 或者如何从该数组中获取dns查询结构? 我需要dns查询问题和类型。

如何通过串口发送浮动

在Arduino上串行发送float , double和int16的最佳方法是什么? Serial.print()仅以ASCII编码方式发送值。 但我想将值作为字节发送。 Serial.write()接受字节和字节Serial.write() ,但是将值转换为字节的最佳方法是什么? 我试图将int16转换为byte* ,没有运气。 我也使用了memcpy,但它使用了很多CPU周期。 Arduino使用普通的C / C ++。 这是一个ATmega328微控制器。

C函数将float转换为byte数组

我正在尝试创建一个接受float变量并将其转换为字节数组的函数。 我发现了一段可行的代码,但如果可能的话,我希望在函数中重用它。 我也在使用Arduino环境,但我知道它接受大多数C语言。 目前有效: float_variable = 1.11; byte bytes_array[4]; *((float *)bytes_array) = float_variable; 我可以在这里更改以使此function有效吗? float float_test = 1.11; byte bytes[4]; // Calling the function float2Bytes(&bytes,float_test); // Function void float2Bytes(byte* bytes_temp[4],float float_variable){ *(float*)bytes_temp = float_variable; } 我对指针等不太熟悉,但我读过(浮动 )是使用铸造还是什么? 任何帮助将不胜感激! 干杯 *编辑:已解决 这是我的最终function在Arduino中适用于任何发现此function的人。 在下面的答案中有更有效的解决方案,但我认为这是可以理解的。 function:将输入浮点变量转换为字节数组 void float2Bytes(float val,byte* bytes_array){ // Create union of shared memory space union […]