小编Ali*_*Ali的帖子

检查 char 数组中前导字符的最快方法是什么?

我的代码遇到了瓶颈,所以这个问题的主要问题是性能。

我有一个十六进制校验和,我想检查一个字符数组的前导零。这就是我正在做的:

bool starts_with (char* cksum_hex, int n_zero) {
  bool flag {true};
  for (int i=0; i<n_zero; ++i)
    flag &= (cksum_hex[i]=='0');
  return flag;
}
Run Code Online (Sandbox Code Playgroud)

如果cksum_hex有,则上述函数返回truen_zero前导零,。但是,对于我的应用程序,此功能非常昂贵(占总时间的 60%)。换句话说,它是我代码的瓶颈。所以我需要改进它。

我还检查了std::string::starts_with哪些在 C++20 中可用,我发现性能没有差异:

// I have to convert cksum to string
std::string cksum_hex_s (cksum_hex);
cksum_hex_s.starts_with("000");     // checking for 3 leading zeros
Run Code Online (Sandbox Code Playgroud)

有关我正在使用的更多信息 g++ -O3 -std=c++2a,我的 gcc 版本是 9.3.1。

问题

  • 检查 char 数组中前导字符的更快方法是什么?
  • 有没有更有效的方法来做到这一点 std::string::starts_with
  • 按位运算在这里有帮助吗?

c++ optimization performance c++20

29
推荐指数
4
解决办法
2007
查看次数

如何使用 python 建立 TLS 连接?

我想创建到服务器的 TLS 连接。然后,我想发送一些加密的数据到服务器。我知道主机名和端口并且有证书。令人惊讶的是,我还收到了服务器的私钥。但是,我认为我收到私钥是不正常的。

第一个问题是,我真的需要私钥来建立 TLS 连接吗?

顺便说一句,我正在使用这个 python 脚本

import socket
import ssl

server_addr = '**.**.**.**'
server_port = ****
server_cert = 'server.crt'
server_key  = 'server.key'        # I use the private key

context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
context.verify_mode = ssl.CERT_REQUIRED
context.load_cert_chain(certfile=server_cert, keyfile=server_key)

bindsocket = socket.socket()
bindsocket.connect((server_addr, server_port))
Run Code Online (Sandbox Code Playgroud)

我在上面的脚本中使用私钥。它可以正常工作,没有任何错误。但是,当我尝试使用 bind() 而不是 connect() 时,即

bindsocket.bind((server_addr, server_port))
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

OSError: [Errno 99] 无法分配请求的地址

我已经阅读了许多有关上述错误的相关问题,但是,我仍然不明白为什么会发生这种情况。因为我有主机名、端口、证书和密钥,所以我希望能够成功创建 TLS 连接。

第二个问题是如何建立TLS连接?我的脚本正确吗?

我非常感谢任何改进脚本的评论。

ssl python-3.x tls1.2

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

为什么主类模板中的成员未在专用类的范围内声明?

请注意,您将在此处看到代码的过度简化版本。所以它可能看起来没用。然而,这不是问题。

问题是我有一个像这样的主要模板类:

// The primary template class
template<int N>
struct Start {
  int start;

  template<typename... Args>
  int operator()(Args... args) const {return start;}
};
Run Code Online (Sandbox Code Playgroud)

当我专门研究这个类模板时:

// Specialization for N=1:
template<>
struct Start<1> {
  int operator()(int i) const {return start;}
};
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

error: ‘start’ was not declared in this scope
int operator()(int i) const {return start;}
Run Code Online (Sandbox Code Playgroud)

为什么start不在类的范围内声明Start<1>

  • 为什么专业类不识别主类的成员?

我很感激任何建议。

c++

5
推荐指数
1
解决办法
80
查看次数

最快的 SHA1 实施是什么?

我正在寻找最快的 SHA1 实现,因为我必须对其进行数百万次计算。我尝试了boost::uuids::detail::sha1OpenSSL SHA1我发现 OpenSSL 比 boost 快 2.5 倍。我还检查了Crypto++,它比其他两个慢得多。以下是我检查他们表现的方法:

OpenSSL SHA1:

#include "openssl/sha.h"

void sha1_ossl (const unsigned char* data) {
    unsigned char  hash[20];
    for (long i=0; i<100000000; ++i) {
      SHA1(data, 64, hash);
    
      if ((unsigned int)hash[0]==0 && (unsigned int)hash[1]==0 && (unsigned int)hash[2]==0 && (unsigned int)hash[3]==0)
          break;
    }
}
Run Code Online (Sandbox Code Playgroud)

提升::SHA1:

#include <boost/uuid/detail/sha1.hpp>

void sha1_boost (const unsigned char* data) {
    boost::uuids::detail::sha1 sha1;
    unsigned hash[5];
    for (long i=0; i<100000000; ++i) {
        sha1.process_bytes(data, 64);
        sha1.get_digest(hash);
        sha1.reset(); …
Run Code Online (Sandbox Code Playgroud)

c++ boost openssl crypto++

5
推荐指数
1
解决办法
2109
查看次数

如何将 std::is_convertible_v 应用于一组可变参数?

我想检查一个参数列表是否可以转换为size_t。我认为这可能std::is_convertible_v是来自 STL 的正确工具。这是我想象的应该是(这是错误的):

#include <type_traits>

template<typename... Args>
constexpr bool check_all_convertible ()
{
    return std::is_convertible_v<Args,size_t>;
}
Run Code Online (Sandbox Code Playgroud)

我终于想用check_all_convertible()来启用另一个功能:

template<typename... Args>
std::enable_if_t<check_all_convertible<Args...>(), void> 
    some_function (Args... args) {}
Run Code Online (Sandbox Code Playgroud)

  • 我如何使用std::is_convertible_v可变参数?
  • 您是否建议 STL 提供更好的方法?

我感谢任何改进上述代码的建议。

c++ c++17

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

标签 统计

c++ ×4

boost ×1

c++17 ×1

c++20 ×1

crypto++ ×1

openssl ×1

optimization ×1

performance ×1

python-3.x ×1

ssl ×1

tls1.2 ×1