- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将以下 python 代码移植到 c#
import os
import sys
import ctypes
FNV32_PRIME = 0xB3CB2E29
FNV32_BASIS = 0x319712C3
def uint32(v):
return ctypes.c_uint32(v).value
def fnv1a_hash(data):
hval = FNV32_BASIS
for i in range(0, len(data)):
hval = uint32(hval ^ data[i])
hval = uint32(hval * FNV32_PRIME)
return hval
print("starting")
if len(sys.argv) == 2:
input_file_path = sys.argv[1]
else: input_file_path = "dvars.txt"
with open(input_file_path, "r") as input_file:
for dvar_name in input_file:
dvar_name = dvar_name.rstrip("\r\n")
dvar_hash_1 = dvar_name.lower() + '\x00'
dvar_hash_2 = bytearray(dvar_hash_1.encode("ascii"))
dvar_hash = fnv1a_hash(dvar_hash_2)
final = "%-30s = 0x%08X" % (dvar_name, dvar_hash)
print(final)
print("done")
效果很好:
starting
con_gameMsgWindow0MsgTime = 0xFC60C821
到目前为止我得到了这个:
public static class Extensions
{
private const UInt32 FnvPrime = 0xB3CB2E29;private const UInt32 FnvOffsetBasis = 0x319712C3;
public static string ToHashFnv1a32(this string text, Fnv1a32 hasher = null)
{
var bytes_encoded = Encoding.UTF8.GetBytes(text); // +'\x00'
if (hasher is null) hasher = new Fnv1a32(fnvPrime: FnvPrime, fnvOffsetBasis: FnvOffsetBasis);
var byte_hash = hasher.ComputeHash(bytes_encoded);
// int decValue = int.Parse(t, System.Globalization.NumberStyles.HexNumber);
var uint32 = BitConverter.ToUInt32(byte_hash, 0);
var uint32_hex = string.Format("{0:X}", uint32);
var uint32_dec = string.Format("{0:D}", uint32);
var stringg = BitConverter.ToString(byte_hash).Replace("-", "");
var expected_hex = string.Format("{0:X}", 0xFC60C821);
var expected_dec = string.Format("{0:D}", 0xFC60C821);
return byte_hash.ToString(); //
}
}
但出于某种原因,我得到了最奇怪的结果:
text "con_gameMsgWindow0LineCount" string
hasher {Fnv1a.Fnv1a32} Fnv1a.Fnv1a32
bytes_encoded {byte[0x0000001b]} byte[]
byte_hash {byte[0x00000004]} byte[]
uint32 0x0a65c1a8 uint
uint32_hex "A65C1A8" string
uint32_dec "174440872" string
stringg "A8C1650A" string
expected_hex "FC60C821" string
expected_dec "4234201121" string
我真的在 table 上磕磕碰碰,因为我似乎无法弄清楚为什么它没有计算正确的哈希值(我正在使用 https://github.com/jslicer/FNV-1a 的修改版本以允许我更改基数和偏移量)
最佳答案
FNV1a -hash 本身适用于 C# 代码。但是,C# 代码与 Python 代码在以下有关输入数据处理的方面有所不同:
\r\n
。此外,C# 代码不使用文本 con_gameMsgWindow0MsgTime
,而是使用 con_gameMsgWindow0LineCount
。
解决方案是在 C# 代码的 ToHashFnv1a32
方法的开头添加以下行:
text = text.TrimEnd('\r', '\n').ToLower() + "\0";
当然,相同数据必须在两个代码中用于测试。
注意:Python 代码中使用的素数和偏移量基础不同于 commonly used values .
关于c# - byte[] 到 0x 十六进制字符串与 fnv1a32,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58046753/
我正在尝试快速实现 FNV 散列的一个版本。这是在 Objective-C 中: + (uint32_t)hash:(uint8_t *)a length:(uint32_t)length {
这是算法的内容。 hash = FNV_offset_basis for each octet_of_data to be hashed hash = hash * FNV_prime
我正在尝试整合 FNV基于 PHP 的项目的哈希算法,作为为各种数据(例如 URL、关键字)生成哈希的要求的一部分。 我看到了这个implementation内文博亚诺夫。他提到由于 PHP 的算术限
如果在计算FNV-1a的过程中有什么不利影响吗?哈希,一次异或 4 个字节而不是一个字节? 最佳答案 是的,有问题。该算法对每个字节进行异或运算,然后乘以将该字节与其余值“混合”。如果您一次对四个字节
我的 iPhone 项目中有一个 HTTP 连接器,查询必须使用 Fowler–Noll–Vo (FNV) 哈希根据用户名设置参数。 此时我有一个 Java 实现,这是代码: long fnv_pri
我有一列存储 uuid 字符串。我添加一个新列来存储其整数(64 位)哈希值以进行索引。选择哪个哈希函数? 1. int(md5('a306d9cb-4d75-4673-ae43-7004706925
我是一名优秀的程序员,十分优秀!