将位从ulong复制到C#

将位从ulong复制到C#,第1张

概述所以看起来 .NET performance counter type有一个令人讨厌的问题:它暴露了很长的计数器RawValue,而windows中的实际perf计数器值是无符号的,不能为负数.例如,如果您有一个NumberOfItems64计数器API将非常高兴接受一个负值,然后将其静默地转换为一个非常大的数字.事实上,在计数器的一半值范围内,设置它的唯一方法是找到正确的负值传入! 我假设这里发 所以看起来 .NET performance counter type有一个令人讨厌的问题:它暴露了很长的计数器RawValue,而windows中的实际perf计数器值是无符号的,不能为负数.例如,如果您有一个NumberOfItems64计数器API将非常高兴接受一个负值,然后将其静默地转换为一个非常大的数字.事实上,在计数器的一半值范围内,设置它的唯一方法是找到正确的负值传入!

我假设这里发生的是他们从长处获取原始位,并将其视为无符号的64位数字.来自二进制补码的负值只是作为计数器的直线数字读取.

所以我试图弄清楚如何强制C#,只是将ulong直接放入长时间,因为这就是API所要的.但是C#在这里太有用了…你不能使用Convert.ToInt64(ulong)来抛出溢出异常,因为它的值太大了.我以这种转换方式偶然发现:

Convert.ToInt64(myulong.ToString(“X”),16)

当它从非基数10中的字符串转换时,它假定数字是二进制补码,并且我需要它.但是这不是理想的,因为它需要为每个转换分配一个对象并解析一个字符串,这个API将是性能关键的.在C#中有更好的方法吗?

解决方法 一个简单的演员像
ulong value1 = 0xFEDCBA9876543210ul;  // 18364758544493064720long value2 = (long)value1;           // -81985529216486896ulong value3 = (ulong)value2;         // 18364758544493064720

保留数值中的位.

总结

以上是内存溢出为你收集整理的将位从ulong复制到C#全部内容,希望文章能够帮你解决将位从ulong复制到C#所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1259758.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存