小编Nem*_*emo的帖子

模板和标题

那么c ++未来的任何标准计划都要解决必须结合声明和实现的问题吗?

c++ templates

3
推荐指数
1
解决办法
131
查看次数

网络掩码转换为 C++ 中的 CIDR 格式

我必须将 2 个 DWORD、IP 地址和网络掩码转换为 CDIR 格式...所以我有 2 个 DWORD 对应于 1.1.1.1 和 255.255.255.255,我想提出字符串 1.1.1.1/32

对此有何想法?

谢谢

c++ networking

3
推荐指数
1
解决办法
1万
查看次数

使用互斥锁作为条件变量

给出条件变量的规范示例

pthread_mutex_lock(&count_mutex);
pthread_cond_wait(&count_threshold_cv, &count_mutex);
Run Code Online (Sandbox Code Playgroud)

然后我可以从另一个线程发送一个信号,这个线程将继续.

但是我没有看到只是尝试锁定互斥锁有什么问题,如果锁定被执行,那么线程将等待互斥锁被释放.

这种方法唯一的问题是持续轮询吗?

谢谢

c c++ multithreading pthreads

2
推荐指数
1
解决办法
333
查看次数

为什么他们想要一个'unsigned char*'而不仅仅是一个普通的字符串或'char*'

编辑:在采取adivce后,我重新安排了参数和类型.但是当我现在调用digest()函数时,应用程序崩溃了吗?任何想法都出错了?

const std::string message = "to be encrypted";
unsigned char* hashMessage;

SHA256::getInstance()->digest( message, hashMessage ); // crash occurs here, what am I doing wrong?
printf("AFTER: n"); //, hashMessage); // line never reached
Run Code Online (Sandbox Code Playgroud)

我在C++中使用SHA256算法的开源实现.我的问题是理解如何传递我的字符串的unsigned char*版本,以便它可以被散列?

这是一个函数,它接受我的字符串的unsigned char*版本:

void SHA256::digest(const std::string &buf, unsigned char *dig) {
    init();
    update(reinterpret_cast<const unsigned char *>(buf.c_str()), static_cast<unsigned int>(buf.length()));
    final();
    digest(dig);
}
Run Code Online (Sandbox Code Playgroud)

如何将我的字符串(我想要散列)转换为unsigned char*?

当我打印出字符串内容时,我所做的以下代码会导致运行时错误:

const std::string hashOutput;
char message[] = "to be encrypted";

printf("BEFORE: %s bb\n", hashOutput.c_str());
SHA256::getInstance()->digest( hashOutput, reinterpret_cast<unsigned char *>(message) );
printf("AFTER: %s\n", hashOutput.c_str()); // …
Run Code Online (Sandbox Code Playgroud)

c c++ hash

2
推荐指数
1
解决办法
446
查看次数

为我自己的函数执行通常的算术转换?

今天就出现了,所以我想我会把它扔给社区.

一位同事编写了以下代码(或多或少):

#include <algorithm>

double chop(double x) {
    return std::max(0, x);
}
Run Code Online (Sandbox Code Playgroud)

但是这甚至都没有编译,因为它std::max希望它的两个参数具有完全相同的类型.我相信这是如此,它可以采取一对引用并返回一个引用,如果你在用户定义的类型上调用它,很可能是你想要的.很公平.

当然,修复是使用std::max(0.0, x).

现在忍受我一会儿,因为我撒了谎.我的同事实际写的是这样的:

// Included from a very old header file written by someone long gone
template<class T1, class T2>
inline T1 myMax(T1 x, T2 y) {
    return (x < y) ? y : x;
}

double chop(double x) {
    return myMax(0, x);
}
Run Code Online (Sandbox Code Playgroud)

这编译!但它产生了相当令人惊讶的结果,x等于0.25.我不确定他找到问题需要多长时间,甚至在找到问题之后,他不得不问为什么它不起作用.

我的回答是(a)使用0.0而不是0(修正了bug),以及(b)使用std::max而不是myMax(当你考虑它时,它的行为非常可怕).

但他想知道为什么会这样.我的意思是,他可以写0 + x0 * x或者0 - x,为什么不 …

c++

2
推荐指数
1
解决办法
140
查看次数

标签 统计

c++ ×5

c ×2

hash ×1

multithreading ×1

networking ×1

pthreads ×1

templates ×1