将 C# 哈希函数转换为C++
Converting C# hash function to C++
我在C#中有这个函数:
public static unsafe int GetMonoHash(string str) {
unsafe {
fixed (char* src = str) {
char* chPtr2 = src; // + offset;
char* chPtr3 = (chPtr2 + str.Length) - 1;
int num = 0;
while (chPtr2 < chPtr3) {
num = ((num << 5) - num) + chPtr2[0];
num = ((num << 5) - num) + chPtr2[1];
chPtr2 += 2;
}
chPtr3++;
if (chPtr2 < chPtr3) {
num = ((num << 5) - num) + chPtr2[0];
}
return num;
}
}
}
我试图用C++重写它,我走到了这一步:
int Utils::getMonoHash(std::string str)
{
char* src = &str[0];
char* chPtr2 = src; // + offset;
-> char* chPtr3 = (chPtr2 + str.length) - 1;
int num = 0;
while (chPtr2 < chPtr3) {
num = ((num << 5) - num) + chPtr2[0];
num = ((num << 5) - num) + chPtr2[1];
chPtr2 += 2;
}
chPtr3++;
if (chPtr2 < chPtr3) {
num = ((num << 5) - num) + chPtr2[0];
}
return num;
}
这引发了编译错误:
C3867 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>::length': non-standard syntax; use '&' to create a pointer to member
C2297 '+': illegal, right operand has type 'unsigned __int64 (__cdecl std::basic_string<char,std::char_traits<char>,std::allocator<char>>::* )(void) noexcept const'
所以我将指示的 (->
( 行更改为
char* chPtr3 = (chPtr2 + (char *)str.length) - 1;
这给了我一个新的编译错误(这次只有一个,耶!
C2440 'type cast': cannot convert from 'unsigned __int64 (__cdecl std::basic_string<char,std::char_traits<char>,std::allocator<char>>::* )(void) noexcept const' to 'char *'
我不知道现在该怎么办。当给定与 C# 函数相同的输入时,我需要 C++ 函数具有与 C# 函数相同的输出。
我在这里做什么?
str.length 不是一个属性,它是一个函数,需要 ((
根据我作为 C# 程序员的经验,这是 C# 程序员在编写C++时最常犯的错误之一。
不要忘记 str.length 后面的括号。正确的类型应该是这样的
char* chPtr3 = (chPtr2 + str.length()) - 1;
你做什么?你停止"翻译",就好像C++和 C# 有什么共同点一样,而是使用你的基本需求和你的C++书作为指导从头开始编写。
在这种情况下,您的问题是您错误地使用了成员函数。这是str.length()
.编译器的抱怨是关于错误地使用函数名称,而没有实际调用它。
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 正在将指针转换为范围
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 是否可以从int转换为enum类类型
- 了解 GLM- openGL 中的相机转换
- 将无符号char*转换为std::istream*C++