vmware 出现错误,重新注册DLL

regsvr32.exe adjperm.dll
regsvr32.exe basichttp.dll
regsvr32.exe DIFXAPI.dll
regsvr32.exe diskLibWrapper.dll
regsvr32.exe elevated.dll
regsvr32.exe expat.dll
regsvr32.exe glib-2.0.dll
regsvr32.exe glibmm-2.4.dll
regsvr32.exe gmodule-2.0.dll
regsvr32.exe gobject-2.0.dll
regsvr32.exe gthread-2.0.dll
regsvr32.exe gvmomi.dll
regsvr32.exe iconv.dll
regsvr32.exe intl.dll
regsvr32.exe libcds.dll
regsvr32.exe libcurl.dll
regsvr32.exe libeay32.dll
regsvr32.exe libxml2.dll
regsvr32.exe nfc-types.dll
regsvr32.exe pcre.dll
regsvr32.exe sigc-2.0.dll
regsvr32.exe ssleay32.dll
regsvr32.exe ssoclient.dll
regsvr32.exe sysimgbase.dll
regsvr32.exe TPClnRDP.dll
regsvr32.exe TPClnt.dll
regsvr32.exe TPClntdeu.dll
regsvr32.exe TPClntjpn.dll
regsvr32.exe TPClntloc.dll
regsvr32.exe TPClnVM.dll
regsvr32.exe tppcoipw32.dll
regsvr32.exe tprdpw32.dll
regsvr32.exe vim-types.dll
regsvr32.exe vix.dll
regsvr32.exe vixDiskMountApi.dll
regsvr32.exe vmacore.dll
regsvr32.exe vmappcfg.dll
regsvr32.exe vmappsdk.dll
regsvr32.exe vmapputil.dll
regsvr32.exe vmauthd.dll
regsvr32.exe vmclientcore.dll
regsvr32.exe vmdbCOM.dll
regsvr32.exe vmdkShellExt.dll
regsvr32.exe vmeventmsg.dll
regsvr32.exe vmnetBridge.dll
regsvr32.exe vmomi.dll
regsvr32.exe vmPerfmon.dll
regsvr32.exe vmware-tray-helper.dll
regsvr32.exe vmwarebase.dll
regsvr32.exe vmwarecui.dll
regsvr32.exe vmwarestring.dll
regsvr32.exe vmwarewui.dll
regsvr32.exe vnetinst.dll
regsvr32.exe vnetlib.dll
regsvr32.exe vnetlib64.dll
regsvr32.exe zlib1.dll

【解决】sys.stderr.write(f“ERROR: {exc}”)

环境:notebook +ubuntu +python3.5

在安装了pip之后发现出现如下错误:

解决办法:

方法一:重新安装pip, 这里有时可以http 换成 https

wget http://bootstrap.pypa.io/pip/3.5/get-pip.py
python3 get-pip.py

安装的时候它提示python3.5在2020年9月13号停止维护,pip 21.0在2021年一月将停止对python 3.5的支持。

下面就是自动卸载老版的pip 8.1.1然后成功的安装了pip 20.3.4。再次pip list的时候,已经没有错误

wget下载地址可能会发生变化,当发生变化的时候,执行上述命令下方会自动提示这个地址已经失效,会给出最新有效地址,将下载地址替换即可。

方法二:直接更改pip文件如下(不推荐)

#!/usr/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from pip._internal.cli.main import main
if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
    sys.exit(main())

warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]

在C++中,

char* p = "abc";  // valid in C, invalid in C++

会跳出警告:warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]

改成下面会通过warning

char* p = (char*)"abc";  // OK

或者改成下面

char const *p = "abc";  // OK

原因解析:

学习c或者c++的时候都知道,如果在赋值操作的时候,等号两边的变量类型不一样,那么编译器会进行一种叫做 implicit conversion 的操作来使得变量可以被赋值。

在上面的表达式中等号右边的”abc”是一个不变常量,在c++中叫做string literal,type是const char *,而p则是一个char指针。如果强行赋值会发生什么呢?没错,就是将右边的常量强制类型转换成一个指针,结果就是我们在修改一个const常量。编译运行的结果会因编译器和操作系统共同决定,有的编译器会通过,有的会抛异常,就算过了也可能因为操作系统的敏感性而被杀掉。

像这种直接将string literal 赋值给指针的操作被开发者们认为是deprecated,只不过由于以前很多代码都有这种习惯,为了兼容,就保留下来了。

C ++函数指针在类写法对比

情况一、函数指针不使用类的写法
–文件main.cpp

#include <iostream>
#include <string>

typedef void(*function)();
function assignPtr;
std::string name;
    
void Test();
void morning();
void say(std::string a);

void Test() {assignPtr = morning;}
void morning() {std::cout <<"Good morning," << name << std::endl;}
void say(std::string a) {name = a; assignPtr();};


int main() {
    Test();
    say("Miguel");
}

运行结果:

情况二、函数指针使用类的写法

#include <iostream>
#include <string>

class Test {
  public:
    
    Test() {assignPtr = &Test::morning;}
    void say(std::string a) {name = a; (this->*assignPtr)();};
  private:
    typedef void(Test::*function)();
    void morning() {std::cout <<"Good morning," << name << std::endl;}

    function assignPtr;
    std::string name;
};

int main() {
    Test a;
    a.say("Miguel");
}

运行结果:

主要区别在于

在类中需要正确的使用类型

typedef void(Test::*function)();
然后在创建指针和调用指针时都调整语法。
Test() {assignPtr = &Test::morning;} // Get pointer-to-member
void say(std::string a) {name = a; (this->*assignPtr)();};  // Use pointer-to-member

C ++函数指针分配无法转换类内的类型

c++classfunctionpointers

C++ Function Pointer assignment cannot convert types inside a class

本问题已经有最佳答案,请猛点这里访问。

我有一个简单的类,该类具有指向函数的指针。 构造函数将其指向函数” morning()”,并且在编译时收到错误消息:

1
2
error: cannot convert ‘Test::morning’ from type ‘void (Test::)()’ to type ‘Test::function {aka void (*)()}’
     Test() {assignPtr = morning;}

当在函数外部声明” morning()”和typedef时,代码会编译,而我无法弄清楚如何使其在当前类中工作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>class Test {
 public:
    Test() {assignPtr = morning;}
 void say(std::string a) {name = a; assignPtr();};
 private:
 typedef void(*function)();
 void morning() {std::cout <<“Good morning,” << name << std::endl;}
 void night() {};
    function assignPtr;
    std::string name;
};int main() {
    Test a;
    a.say(“Miguel”);
}

指向成员函数的指针不是常规函数指针。 该类是该类型的一部分,您需要指定要使用哪个对象进行调用。

您需要使用正确的类型

1typedef void(Test::*function)();

然后在创建指针和调用指针时都调整语法。

1
2
Test() {assignPtr = &Test::morning;} // Get pointer-to-member
void say(std::string a) {name = a; (this->*assignPtr)();}; // Use pointer-to-member

函数指针和成员函数指针不是一回事。 那就是编译器告诉您的内容。 类型不匹配。 您的目标定义为void(*)(),而您正尝试将其交付给void(Test::*)()。 它们甚至没有相同的调用语义。 后者具有Test*const this盲参数。

更改function的类型或为其提供常规函数以进行调用。

提示:任何时候您的编译器因无法将其转换为该错误而抱怨…您的类型不匹配。

树莓派3重新安装raspyberry lite

(更新时间 :2023-3-30)

(一、Ubuntu安装篇)
1.先下载一个系统

下载

https://downloads.raspberrypi.org/raspios_lite_armhf/images/raspios_lite_armhf-2022-09-26/2022-09-22-raspios-bullseye-armhf-lite.img.xz

个是不带在桌面的。

2.无需要解压文件,大小约313,917KB

3.用树莓派自带的 image把文件写入TF卡

  1. 就可以启动了。

5.选择ENGLISH语言

6.连接wifi

(二、修改网络)

  1. vi /etc/dhcpcd.conf
interface eht0
static ip_address=10.8.0.88/24
static routers=10.8.0.1
static domain_name_servers=202.96.128.86

sudo reboot

(三\安装小软件)

安装 vim, gcc, wget

apt-get install -y wget vim gcc

apt-get install -y make

apt-get install -y openssl
apt-get install -y iw
apt-get install -y usbutils
apt-get install -y v4l-utils
apt-get install -y ntfs-3g
apt-get install -y zip
apt-get install -y unzip
apt-get install -y cpio
apt-get install -y pkg-config
apt-get install -y automake
apt-get install -y gcc 

apt-get install -y gimp

apt-get install -y swig 

apt-get install -y libtool
apt-get install -y nasm 

apt-get install -y autoconf 

apt-get install -y automake 

apt-get install -y git 


apt-get install -y mercurial 


apt-get install -y libcurl4

apt-get install -y cmake

apt-get install -y yasm


#firewall

apt-get install -y ufw
#

apt-get install -y chkconfig

用管理员来行

vi /etc/sudoers

在root ALL=(ALL:ALL) ALL 下面加一行
mee ALL=(ALL:ALL) ALL
pi ALL=(ALL:ALL) ALL

安装转码工具
apt-get install -y gpac

安装CURL

curl是一款著名的字符界面下的下载工具,支持HTTP、HTTPS、FTP、FTPS、DICT、TELNET、LDAP、FILE,和GOPHER。此外还具有cookies支持、断点续传、FTP上传、密码支持、SSL支持和代理支持等特性。curl同时还提供了一套libcurl的库,开发者可以基于这个库开发其他下载工具。
curl 的官网下载地址:http://curl.haxx.se/download/
截止2014.9月更新至7.38版本。
1.下载
wget http://curl.haxx.se/download/curl-7.38.0.tar.gz
2.解压
tar -xzvf curl-7.38.0.tar.gz
3.安装
cd curl-7.38.0
./configure
make
make install
4.完成
#修改/etc/profile
vi /etc/profile
PATH:=添加 /usr/local/curl/lib:/usr/local/curl/include:/usr/local/curl/include
source /etc/profile
#测试
echo $PATH

安装sqlite

解压命令:
tar zvxf sqlite-autoconf-3110000.tar.gz
配置
cd sqlite-autoconf-3110000
./configure --prefix=/usr/local/sqlite
编译
make        
安装
make install 

修改profile PATH变量

$PATH:=$PATH:/usr/local/sqlite/bin:/usr/local/sqlite/lib:/usr/local/sqlite/include
source /etc/profile
echo $PATH

c++ linux utf-8 编码 中文汉字分割(超简单代码)

UTF-8 编码对于英文字母,占用一个字节;
UTF-8 编码对于中文字母,占用多个字节,最大占用6个字节,其中第一个字节二进制的最高位连续1的个数来表示占用字节的个数,例如;
汉字“中”占3个字节

“中” : ‭11100100  10111000  10101101‬ // 最高位连续3个1
“国” : ‭11100101  10011011  10111101‬  // 最高位连续3个1

实现汉字的分割代码:

vector<string> list;
int strSize = str.size();
int i = 0;

while (i < strSize) {
    int len = 1;
    for (int j = 0; j < 6 && (str[i] & (0x80 >> j)); j++) {
        len = j+1;
    }
    list.push_back(str.substr(i, len));
    i += len;
}

C++ Unicode/UTF-8中文 相互转换

C++ Unicode/UTF-8中文 相互转换
需求一

中文 ”你好啊“ ———-unicode———-> \u4F60\u597D\u554A

unicode编码字符串转中文。
例: “4F60597D554A” —> “你好啊”
解决方式

需求二

unicode 字节数组转中文
例:0x89 0x7F 0x5B 0x89 0x8D 0xEF —> 西安路
解决方式

需求三 中英文转unicode

asd你好阿 —-> 0061007300644f60597d963f
解决方式

string 与 wstring 的转换


#include <codecvt>
#include <string>
std::wstring s2ws(const std::string& str{

  using convert_typeX = std::codecvt_utf8<wchar_t>;

  std::wstring_convert<convert_typeX, wchar_t> converterX;

  return converterX.from_bytes(str);

}

std::string ws2s(const std::wstring& wstr)

{

  using convert_typeX = std::codecvt_utf8<wchar_t>;

  std::wstring_convert<convert_typeX, wchar_t> converterX;

  return converterX.to_bytes(wstr);

}

C++Unicode 和 UTF-8 的转换

代码摘抄于 Stack Overflow

连接:https://stackoverflow.com/questions/12015571/how-to-print-unicode-character-in-c

我一开始的需求是需要在控制台打印进度,用连续的实心正方形来模拟进度,所以就想打印正方形(2588),所以就找到了这个帖子,顺便附上打印实心正方形的代码:

std::cout << "\u2588" << std::endl;

以下是一些转换代码:


#include <iostream>

using namespace std;


int utf8_to_unicode(string utf8_code);
string unicode_to_utf8(int unicode);


int main() {
    cout << unicode_to_utf8(36) << '\t';
    cout << unicode_to_utf8(162) << '\t';
    cout << unicode_to_utf8(8364) << '\t';
    cout << unicode_to_utf8(128578) << endl;

    cout << unicode_to_utf8(0x24) << '\t';
    cout << unicode_to_utf8(0xa2) << '\t';
    cout << unicode_to_utf8(0x20ac) << '\t';
    cout << unicode_to_utf8(0x1f642) << endl;

    cout << utf8_to_unicode("$") << '\t';
    cout << utf8_to_unicode("¢") << '\t';
    cout << utf8_to_unicode("€") << '\t';
    cout << utf8_to_unicode("?") << endl;

    cout << utf8_to_unicode("\x24") << '\t';
    cout << utf8_to_unicode("\xc2\xa2") << '\t';
    cout << utf8_to_unicode("\xe2\x82\xac") << '\t';
    cout << utf8_to_unicode("\xf0\x9f\x99\x82") << endl;

    return 0;
}

int utf8_to_unicode(string utf8_code) {
    unsigned utf8_size = utf8_code.length();
    int unicode = 0;

    for (unsigned p = 0; p < utf8_size; ++p) {
        int bit_count = (p ? 6 : 8 - utf8_size - (utf8_size == 1 ? 0 : 1)),
            shift = (p < utf8_size - 1 ? (6 * (utf8_size - p - 1)) : 0);

        for (int k = 0; k < bit_count; ++k)
            unicode += ((utf8_code[p] & (1 << k)) << shift);
    }

    return unicode;
}

string unicode_to_utf8(int unicode) {
    string s;

    if (unicode >= 0 and unicode <= 0x7f) { // 7F(16) = 127(10)
        s = static_cast<char>(unicode);

        return s;
    } else if (unicode <= 0x7ff) { // 7FF(16) = 2047(10)
        unsigned char c1 = 192, c2 = 128;

        for (int k = 0; k < 11; ++k) {
            if (k < 6)  c2 |= (unicode % 64) & (1 << k);
            else c1 |= (unicode >> 6) & (1 << (k - 6));
        }

        s = c1;    s += c2;

        return s;
    } else if (unicode <= 0xffff) { // FFFF(16) = 65535(10)
        unsigned char c1 = 224, c2 = 128, c3 = 128;

        for (int k = 0; k < 16; ++k) {
            if (k < 6)  c3 |= (unicode % 64) & (1 << k);
            else if (k < 12) c2 |= (unicode >> 6) & (1 << (k - 6));
            else c1 |= (unicode >> 12) & (1 << (k - 12));
        }

        s = c1;    s += c2;    s += c3;

        return s;
    } else if (unicode <= 0x1fffff) { // 1FFFFF(16) = 2097151(10)
        unsigned char c1 = 240, c2 = 128, c3 = 128, c4 = 128;

        for (int k = 0; k < 21; ++k) {
            if (k < 6)  c4 |= (unicode % 64) & (1 << k);
            else if (k < 12) c3 |= (unicode >> 6) & (1 << (k - 6));
            else if (k < 18) c2 |= (unicode >> 12) & (1 << (k - 12));
            else c1 |= (unicode >> 18) & (1 << (k - 18));
        }

        s = c1;    s += c2;    s += c3;    s += c4;

        return s;
    } else if (unicode <= 0x3ffffff) { // 3FFFFFF(16) = 67108863(10)
        ;  // actually, there are no 5-bytes unicodes
    } else if (unicode <= 0x7fffffff) { // 7FFFFFFF(16) = 2147483647(10)
        ;  // actually, there are no 6-bytes unicodes
    } else  ; // incorrect unicode (< 0 or > 2147483647)

    return "";
}

C++字符数字的编码(Encode)与解码(Decode)

在日常应用中,我们常用结构体或者类来存储一条信息,这种方式很方便,但是不利于数据的传输。例如在网络编程中,我们需要将结构中的数据转化为字节流才能进行传输,我们可以利用memcpy强行将结构化的数据转化为字符串,在接收方以同样的方式转化为来。此法简单易用,但是由于结构化的数据涉及到字符对齐的问题,这种方法会造成额外的数据开销,所以我们最好自己手动对结构化的数据进行编码,当然这种方法也有弊端,虽然在一定程度上节省了传输流量,但结构中的字段很多时,代码量会增大,最好编写工具自动生成一些代码。

#include <iostream>
 #include <memory.h>
 #include <string.h>
 using namespace std;
 
 #define ENCODE(buf, size, offset, data)\
     if ((NULL == buf) || ( == size))\
     {\
     return -;\
     }\
     if (offset + sizeof(data) > size)\
     {\
     return -;\
     }\
     {\
     uint8_t *p = (uint8_t*)buf;\
     p=p+offset; \
     memcpy(p,&data,sizeof(data)); \
     offset = offset + sizeof(data); \
     }
 
 #define DECODE(buf, size, offset, data)\
     if ((NULL == buf) || ( == size))\
     {\
     return -;\
     }\
     if (offset + sizeof(data) > size)\
     {\
     return -;\
     }\
     {\
     uint8_t *p = (uint8_t*)buf;\
     p=p+offset; \
     memcpy(&data,p,sizeof(data)); \
     offset = offset + sizeof(data); \
     }
 
 #define ENCODE_STR(buf, size, offset, data, length)\
     if ((NULL == buf) || ( == size) || ( >= length) )\
     {\
     return -;\
     }\
     if (offset + length > size)\
     {\
     return -;\
     }\
     {\
     uint8_t *p = (uint8_t*)buf;\
     p=p+offset; \
     memcpy(p,data,length); \
     offset = offset+ length; \
     }
 
 #define DECODE_STR(buf, size, offset, data, length)\
     if ((NULL == buf) || ( == size) || ( >= length) )\
     {\
     return -;\
     }\
     if (offset + length > size)\
     {\
     return -;\
     }\
     {\
     uint8_t *p = (uint8_t*)buf;\
     p=p+offset; \
     memcpy(data,p,length); \
     offset = offset+ length; \
     }
 
 enum{
     enmMaxMsgLength = ,
     enmMaxNameLength =
 };
 
 class Msg{
     int iAge;
     char szName[enmMaxNameLength];
     double dScore;
 public:
     Msg()
     {
 
     }
     Msg(int age,const char* name,double score):iAge(age),dScore(score)
     {
         strcpy(szName,name);
     }
     virtual ~Msg(){}
     virtual int encode(char *buf)
     {
         size_t offset = ;
         memset(buf,'',enmMaxMsgLength);
         ENCODE(buf,enmMaxMsgLength,offset,iAge);
         ENCODE_STR(buf,enmMaxMsgLength,offset,szName,enmMaxNameLength);
         ENCODE(buf,enmMaxMsgLength,offset,dScore);
         return offset;
     };
     virtual int decode(char *buf,size_t bufSize)
     {
         size_t offset = ;
         DECODE(buf,bufSize,offset,iAge);
         DECODE_STR(buf,bufSize,offset,szName,enmMaxNameLength);
         DECODE(buf,bufSize,offset,dScore);
         return offset;
     }
     void display()
     {
         cout<<iAge<<" "<<szName<<" "<<dScore<<endl;
     }
 };
 
 int main(int argc, char* argv[])
 {
     size_t offset = ;
     char buf[enmMaxMsgLength],*recv = NULL;
     Msg msg(,"hwllo world",23.69),msg1;
     msg.display();
     offset = msg.encode(buf);
     cout<<offset<<endl;
     cout<<sizeof(Msg)<<endl;
     recv = new char[offset];
     memcpy(recv,buf,offset);
     msg1.decode(recv,offset);
     msg1.display();
     return ;
 }