Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#BigInteger到32字节十六进制_C#_Hex_Biginteger_Ethereum - Fatal编程技术网

c#BigInteger到32字节十六进制

c#BigInteger到32字节十六进制,c#,hex,biginteger,ethereum,C#,Hex,Biginteger,Ethereum,我需要从一个biginteger到一个32字节的十六进制值。要在此说明的第三个参数中使用: 我的当前代码没有生成有效的十六进制值 public static string GetTargetHex(BigInteger difficulty) { // 2^256 / difficulty. var target = BigInteger.Divide(BigInteger.Pow(2, 256), difficulty); return $"0x{target.ToS

我需要从一个biginteger到一个32字节的十六进制值。要在此说明的第三个参数中使用:

我的当前代码没有生成有效的十六进制值

public static string GetTargetHex(BigInteger difficulty)
{
    // 2^256 / difficulty.
    var target = BigInteger.Divide(BigInteger.Pow(2, 256), difficulty);
    return $"0x{target.ToString("X16").ToLower()}";
}

现在我只需要知道23142114022743的值会导致十六进制值“0x00000000000c29b321174712bb7ca6dd0896b050e18d4c7e13df4c1aee84f2c0”。

以太坊有自己的十六进制编码/解码标准

您可以使用Nethereum进行此操作

从屏幕截图中获取您的工作:

使用系统;
使用系统文本;
使用Nethereum.Hex.hexconverter.Extensions;
使用System.Threading.Tasks;
使用Nethereum.Web3;
使用Nethereum.RPC.Eth.block;
使用Nethereum.Hex.HexTypes;
公共类解码
{
专用静态异步任务主(字符串[]args)
{
var web3=新的web3(“您的url”);
var work=await web3.Eth.Mining.GetWork.SendRequestAsync();
控制台写入线(工作长度);
}
}
要进行计算,根据你的endianism,你可以这样做:

使用系统;
使用系统文本;
使用Nethereum.Hex.hexconverter.Extensions;
使用System.Threading.Tasks;
使用Nethereum.Web3;
使用Nethereum.RPC.Eth.block;
使用Nethereum.Hex.HexTypes;
使用系统数字;
公共类解码
{
专用静态异步任务主(字符串[]args)
{
风险值难度=23142114022743;
var target=biginger.Divide(biginger.Pow(2256),难度);
控制台写入线(目标);
//对endianism和Reversion的简单检查
字节[]字节;
Console.WriteLine(BitConverter.IsLittleEndian);
if(位转换器.IsLittleEndian)
字节=target.ToByteArray().Reverse().ToArray();
其他的
字节=target.ToByteArray().ToArray();
Console.WriteLine(bytes.ToHex());
//现在使用.Net core的另一个选项(棒极了)
Console.WriteLine(target.ToByteArray(true,true.ToHex());//新的.net内核
//如果您使用的是Nethereum而不是.Net core,则为最后一个选项
WriteLine(HexBigIntegerConvertorExtensions.ToByteArray(target,false.ToHex());
//0x00000000000c29b321174712bb7ca6dd0896b050e18d4c7e13df4c1aee84f2c0
//0x00000000000c29b321174712bb7ca6dd0896b050e18d4c7e13df4c1aee84f2c0
}
}

请将描述作为文本而不是屏幕截图。在这里使用截图没有任何好处。此外,请详细说明“未生成有效十六进制值”的含义-它生成的是什么,以及您期望的是什么?理想情况下,提供一个。你能给我们一个链接到你从中获得描述的文档吗?@AndrewMorton。这是以太坊工作证明挖掘的边界。我怀疑您的示例是错误的,因为我在C#和Python中都得到了0x00000000000c29b321174712bb7ca6dd0896b050e18d4c7e13df4c1aee84f2c1。或者可能是非包容性的(@AndrewMorton听起来似乎有道理。你是通过什么方法得到你在c#中的值的?