首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C到黄金转换,为什么我的代码不能工作?

C到黄金转换,为什么我的代码不能工作?
EN

Stack Overflow用户
提问于 2021-06-28 08:28:26
回答 2查看 103关注 0票数 0

这些天我遇到了一个问题,我需要把c代码转换成golang。我试过convert.It不起作用。

id应该是db_table_64的子数据库和子表;id :3ca042611c8411e3b068 db_d0189890a。

C代码:

代码语言:javascript
复制
uint64_t __fastcall LiveHash(const char *key, int len, int left, int right)
{
  int v4; // ecx
  unsigned __int8 *v5; // r8
  int v6; // er9
  int v7; // eax
  int v8; // edx
  int v9; // ecx
  unsigned int v10; // eax
  int v11; // eax
  unsigned int v12; // eax
  int v14; // eax
  unsigned int v15; // eax

  if ( len <= 0 || !key )
    return 0LL;
  v4 = len;
  v5 = (unsigned __int8 *)key;
  if ( len >> 2 > 0 )
  {
    v6 = len >> 2;
    do
    {
      v7 = v5[3];
      v8 = v4 + *v5 + (v5[1] << 8);
      v9 = v5[2];
      v5 += 4;
      v10 = (v8 << 16) ^ v8 ^ ((v9 + (v7 << 8)) << 11);
      --v6;
      v4 = v10 + (v10 >> 11);
    }
    while ( v6 );
    v5 = (unsigned __int8 *)&key[4 * ((len >> 2) - 1) + 4];
  }
  v11 = len & 3;
  switch ( v11 )
  {
    case 2:
      v4 = ((v4 + *v5 + (v5[1] << 8)) ^ ((v4 + *v5 + (v5[1] << 8)) << 11))
         + (((v4 + *v5 + (v5[1] << 8)) ^ ((v4 + *v5 + ((unsigned int)v5[1] << 8)) << 11)) >> 17);
      break;
    case 3:
      v14 = v4 + *v5 + (v5[1] << 8);
      v15 = v14 ^ ((char)v5[2] << 18) ^ (v14 << 16);
      v4 = v15 + (v15 >> 11);
      break;
    case 1:
      v4 = ((v4 + (char)*v5) ^ ((v4 + (char)*v5) << 10))
         + (((v4 + (char)*v5) ^ (unsigned int)((v4 + (char)*v5) << 10)) >> 1);
      break;
  }
  v12 = ((v4 ^ (unsigned int)(8 * v4)) >> 5) + (v4 ^ 8 * v4);
  return (((v12 ^ 4 * v12) >> 15) + (v12 ^ 4 * v12)) ^ ((((v12 ^ 4 * v12) >> 15) + (v12 ^ 4 * v12)) << 10);
}

我的围棋代码:

代码语言:javascript
复制
func hash(guid string)int{
    v5 := make([]int, len(guid))
    for i := range guid{
        v5[i]= int(guid[i])
    }
    fmt.Println(v5)
    var v7,v8,v9, v10 int
    v4 := len(guid)
    if v4 >> 2 > 0{
        v6 := v4>>2
        for i:=v6;i>0;i--{
            v7 = v5[3]
            v8 = v4+v5[0]+(v5[1]<<8)
            v9 = v5[2]
            v10 = (v8<<16) ^ v8 ^((v9+(v7<<8))<<11)
            v6--
            v4 = v10+(v10>>11)
        }
        start := 4*((v4>>2)-1)+4
        if start < 0{
            start = 0
        }
        v5 = v5[start:]
    }
    v11:= v4&3
    switch v11 {
    case 2:
        v4 = ((v4+v5[0]+(v5[1]<<8))^((v4+v5[0]+(v5[1]<<8))<<11))+
            (((v4+v5[0]+(v5[1]<<8)) ^ ((v4+v5[0]+(v5[1]<<8))<<11))>> 17)
    case 3:
        v14:=v4+v5[0]+(v5[1]<<8)
        v15 := v14^(v5[2]<<18)^(v14<<16)
        v4 = v15+(v15>>11)
    case 1:
        v4 = ((v4+v5[0])^((v4+v5[0])<<10))+(((v4+v5[0])^((v4+v5[0]) << 10))>>1)
    }
    v12 := ((v4^(8*v4))>>5)+(v4^8*v4)
    return (((v12^4*v12)>>15)+(v12^4*v12))^((((v12^4*v12)>>15)+(v12^4*12))<< 10)
}

我的函数运行结果是2782879514833785705,不知道如何将子数据库和子表转到db_table_64

EN

回答 2

Stack Overflow用户

发布于 2021-06-30 07:01:12

这是我的密码,哈哈

代码语言:javascript
复制
func hash(guid string)uint32{
    v5 := make([]uint8, len(guid))
    for i := range guid{
        v5[i]= guid[i]
    }
    var v7,v8,v9 int32
    var v10 uint32
    v4 := int32(len(guid))
    if v4 >> 2 > 0{
        v6 := v4>>2
        for i:=v6;i>0;i--{
            v7 = int32(v5[3])
            v8 = v4+int32(v5[0])+(int32(v5[1])<<8)
            v9 = int32(v5[2])
            v5 = v5[4:]
            v10 = uint32((v8<<16) ^ v8 ^((v9+(v7<<8))<<11))
            v6--
            v4 = int32(v10+(v10 >> 11))
        }
    }
    v12 :=  int32(int64(uint32(v4^int32(uint32(8*v4)))>>5)+int64(v4^8*v4))
    v13 := uint32(v12)
    v14 := int32((v13^4*v13)>>15)
    v15 := v12^4*v12
    return uint32((v14+v15)^((v14+v15)<< 10))
}
票数 0
EN

Stack Overflow用户

发布于 2022-03-16 14:38:07

我有一些关于数学计算的代码,在python中正常工作。它能工作100000000次。但是在go中,它只能给我正确的答案100000,100000000次将停止在一个高CPU的使用,而从来没有给我答案。

66811根20 0 703688 6808 1200 S 100.7 0.3 3:52.52

我想,这是一个内存问题,但实际上,CPU问题。我不知道怎么修理。

同样的问题?golang math can not finished with my code, but python is ok

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68160032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档