我正在编写一个websocket服务器,我必须处理需要取消屏蔽的屏蔽数据.
掩码是unsigned char [4],数据也是unsigned char*缓冲区.
我不希望逐字节XOR,我更喜欢一次XOR 4字节.
uint32_t * const end = reinterpret_cast<uint32_t *>(data_+length);
for(uint32_t *i = reinterpret_cast<uint32_t *>(data_); i != end; ++i) {
*i ^= mask_;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下使用reinterpret_cast有什么问题吗?
替代方案是以下代码,它不是那么明确而且不够快:
uint64_t j = 0;
uint8_t *end = data_+length;
for(uint8_t *i = data_; i != end; ++i,++j) {
*i ^= mask_[j % 4];
}
Run Code Online (Sandbox Code Playgroud)
我很喜欢替代品,包括那些依赖于c ++ 11功能的产品.
RAND_bytes 的文档声称,如果生成的随机字节是可预测的,该函数可能会返回错误。我的问题是此类错误发生的频率如何?
可以在有限循环中调用 RAND_bytes (例如 5 次尝试),然后抛出异常是解决此问题的合理方法,或多或少像这样:
unsigned char random_bytes[4];
uint8_t attempts = 0;
while(RAND_bytes(random_bytes,sizeof(random_bytes)) != 1 && ++attempts != 5 ) { }
if( attempts == 5)
{
throw std::runtime_error("random bytes too predictable after multiple attempts");
}
Run Code Online (Sandbox Code Playgroud)
或者这个循环很愚蠢,我应该在第一次尝试后抛出?
谢谢。
我需要更改logger.exception默认行为以写入具有level = CRITICAL的记录器.这似乎是我可以改变的东西,但我还没弄明白.我的最后一招是sys.excepthook,但我不想使用它,因为我在那里做格式化.
谢谢!
我有一个 mktime 想要返回一个 datetime 对象。我想出的最好方法似乎太复杂了:
DateTime::createFromFormat("Y-m-d H:i:s",date("Y-m-d H:i:s",mktime(0, 0, 0, $data[$j]['month'], $data[$j]['day'],$data[$j]['year'])));
Run Code Online (Sandbox Code Playgroud)
有什么更好的方法吗?
基于 libstdc++ 的原子交换实现(https://gcc.gnu.org/ml/libstdc++/2014-10/msg00154.html):
看起来静态分配了 16 个互斥锁。当需要发生原子交换时,交换代码会将要交换的 2 个指针散列到这些静态互斥锁、锁和交换中的一个(或两个)。但是,如果一个 shared_ptr 在线程之间共享并且正在被并发访问,那么互斥锁如何帮助保证并发访问和修改的同步?我猜代码假定内部原始指针正确对齐,但这是 x86 规则,而不是 C++ 保证。我缺少什么使交换原子性和正确性而无需为底层原始指针的每次读取额外锁定?
我正在赶上指针.我写了几行代码来测试我可以动态分配2d数组的不同方法(在底部发布)
我的问题如下:
非常感谢,马特
#include <stdio.h>
#include <stdlib.h>
struct myObject
{
int data;
myObject(int i)
{
data = i;
}
myObject()
{
data = 0;
}
};
int main(){
int r = 7;
int c = 6;
printf("Objects using NEW===============================\n");
//notice the triple pointer being assigned a new double pointer array
myObject*** objectNew = new myObject** [r];
for(int i=0;i<r;i++)
{
//objectNew is a 1D array of double pointers, however if we assign another layer of pointers, it …Run Code Online (Sandbox Code Playgroud)