在我的 C# 程序中,我从 PLC 接收日期时间。它以“ ulong ”格式发送数据。如何将 ulong 转换为 DateTime 格式?例如我收到:
ulong timeN = 99844490909448899;//time in nanoseconds
Run Code Online (Sandbox Code Playgroud)
然后我需要将其转换为 DateTime ("MM/dd/yyyy hh:mm:ss") 格式。
我该如何解决这个问题?
我用Google搜索并查看了几个答案,但我还没有找到解决方案:我有一个.txt文件,其中包含超过int.max的行数.如何读取编号> int.max的特定行?我发现这个问题的答案被列为能够
string line = File.ReadLines(FileName).Skip(14).Take(1).First();
Run Code Online (Sandbox Code Playgroud)
但遗憾的是.Skip()扩展方法不接受Long(或在我需要的情况下为ULong)参数.
所以我开始寻找重载.Skip扩展(或更准确地使我自己)接受ULong并发现这对我没有帮助,因为它与Linq实体有关.
请有人帮我理解如何从行号为> int32.Max的文本文件中读取特定行
谢谢
为什么这个分配会产生一个comile错误:Constant value '-2147483648' cannot be converted to a 'ulong'
我必须使用unchecked (...)
这个案例?
ulong xDummy30 = (1 << 30); // works
ulong xDummy31 = (1 << 31); // ERROR 25 Constant value '-2147483648' cannot be converted to a 'ulong'
ulong xDummy32 = (1 << 32); // works
Run Code Online (Sandbox Code Playgroud)
使用它代替工作:
ulong xDummy31a = unchecked((ulong)(1 << 31));
// or
ulong xDummy31b = (1ul << 31); // comment from Regis Portalez
Run Code Online (Sandbox Code Playgroud) 我有一个ulong
值,我需要提高到高功率,但Math.Pow
不能成功产生正确的输出.
我的c#代码:
ulong a = 9123456789;
ulong b = (ulong)Math.Pow(a, 9999);
Console.WriteLine(b);
Run Code Online (Sandbox Code Playgroud)
屏幕输出为0.如何执行此计算并获得正确的结果?
我有一个Dictionary<int,ulong>
,我想存储的地方StudentId
和他/她的注册courses
(保证是2).
现在,正如您所看到的,List
我想将它们存储ulong
为ulong
占用64位并int
占用32位,而不是将2个courseid保存为整数.
所以我的问题是,我如何组合这两个整数id并将它们存储到一个ulong
变量中.我尝试了一些Bitwise操作和转移,但无法弄明白.
如何将十六进制/多数字的重要部分作为字符串?
例如,如果我有0x00000321321,我想得到"321321".
如果我尝试类似的东西:
ulong x = 0x0000023632763;
string s = x.toString();
Run Code Online (Sandbox Code Playgroud)
我知道593700707
,所以这不是我想要的.
那可能吗 ?
谢谢!
我试图在任何地方找到解决方案.我的请求是找到一个非常快速的算法代码,以获得无符号64位积分器(ulong)的二进制表示中的位数.
例如:
127 = 7 binary digits.
153 = 8 binary digits.
Run Code Online (Sandbox Code Playgroud)
我现在找到了两种方法来获得这个.
两种方式都很好,但是当数量很大时,计算时间太长.在10.000.000.000(10亿)之后,你必须计算花费的时间,而不是毫秒,这对于其余代码的性能来说是如此糟糕.
非常感谢并且对于演示文稿感到抱歉,这是用手机写的,我没有所有的工具来把这个更好的和正确的.
编辑1
通过深入了解Bithacks网站并将速度作为首要任务.我想我将使用具有De Bruijn序列实现的Lookup表方法.
正如我在这里找到的:具有2 ^ 6的64位的查找表应该是这样的.
static readonly int[] MultiplyDeBruijnBitPosition2 = new int[64]
{
0,1,2,4,8,17,34,5,11,23,47,31,63,62,61,59,
55,46,29,58,53,43,22,44,24,49,35,7,15,30,60,57,
51,38,12,25,50,36,9,18,37,10,21,42,20,41,19,39,
14,28,56,48,33,3,6,13,27,54,45,26,52,40,16,32
};
Run Code Online (Sandbox Code Playgroud)
在此基础上,用户"R .."从#1,他让自己的paramether,在C#应该是这样的:
public static int GetLog2_DeBruijn(ulong v)
{
return MultiplyDeBruijnBitPosition2[(ulong)(v * 0x022fdd63cc95386dull) >> 58];
}
Run Code Online (Sandbox Code Playgroud)
结果真的很快但错了,我不确切知道为什么.PD:正如您所看到的"0x022fdd63cc95386dull"是128位,C#的接受代码是"0x022fdd63cc95386d".与此处的查找表中显示的相同.
我想因为我不能在C#中使用"0x022fdd63cc95386dull",我必须使用另一个数字而不是58,或者可能是一个完全不同的十六进制64位乘数.
到目前为止,输入的数字为:17012389719861204799(使用了64位)
我在c中有一个计算,我应该在c#中编写它
这是我在c中的代码:
const unsigned long *S //which is an array that already contains data )
unsigned long y;
y = y + S[d]; //S[d] = 2582066069 and y = 3372499074 and the results is 1659597847
Run Code Online (Sandbox Code Playgroud)
但在我的C#代码中:
ulong[] S = (ulong[])hashtable[key];
ulong y = 2582066069;
y = y + S[d]; // s[d] = 3372499074 but the result is = 5954565143
Run Code Online (Sandbox Code Playgroud)
我不会动摇c和c#中这个添加操作的差异你会不会让我感到烦躁不安和我做错了?