java和c#的BigInteger方法问题

头盔程序员 2021-05-22 10:57:51
背景:最近在做一个c#转java的项目

c#的这个方法
BigInteger.Parse(string val, NumberStyles.HexNumber)
BigInteger.Parse("FFFFFFFFFFFEA070", NumberStyles.HexNumber)的结果是-90000
【使用注意:如果十六进制字符串的前两位的数等于或者大于0x80,那么Parse()方法会把第一位作为符号位,即把它存储为负数-----来源于网上】



然后在java的这个方法
new BigInteger(String val, int radix)
new BigInteger("FFFFFFFFFFFEA070",16)的结果是18446744073709461616


两个方法都是16进制转10进制(我应该说的没错吧~),但是结果不一样



如何将上面java的方法结果改成跟c#的结果一样


可能表述不是很清楚,见谅.....
...全文
265 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
morliz子轩 2021-05-23
  • 打赏
  • 举报
回复
java的byte是有符号类型(java就没有无符号类型的数据),值域:-0128~127 c#的byte是无符号类型数值,值域:0~255 解决办法: c#有个sbye是有符号的,采用sbye[]替换bye[],转换问题得以解决。
头盔程序员 2021-05-23
  • 打赏
  • 举报
回复
引用 4 楼 xuzuning 的回复:
java 流行的时候,c# 还没有出生 应该是: 将c#的方法改写成跟java的方法一样
哈哈哈哈我已经解决了这个问题了,写在自己的博客上了
xuzuning 2021-05-23
  • 打赏
  • 举报
回复
java 流行的时候,c# 还没有出生 应该是: 将c#的方法改写成跟java的方法一样
morliz子轩 2021-05-23
  • 打赏
  • 举报
回复
只要看一下C#用的是什么类型,做一下数值类型的转换处理就好了。 不是什么大问题。
头盔程序员 2021-05-23
  • 打赏
  • 举报
回复
引用 1 楼 morliz子轩 的回复:
java的byte是有符号类型(java就没有无符号类型的数据),值域:-0128~127 c#的byte是无符号类型数值,值域:0~255 解决办法: c#有个sbye是有符号的,采用sbye[]替换bye[],转换问题得以解决。
嗯.....我的目的是如何将java的方法改写成跟c#的方法一样.....因为这是系统的类我也看不了源码,不知道如何修改,我是c#小白哈哈哈哈哈哈
xuzuning 2021-05-23
  • 打赏
  • 举报
回复
使用BigInteger.Parse()转换十六进制的字符串为十进制的数字有两个注意点: 1、十六进制的字符串不能以“0x”或者“&h”为前缀 2、如果十六进制字符串的前两位的数等于或者大于0x80,那么Parse()方法会把第一位作为符号位,即把它存储为负数。如果需要把此十六进制的字符串解析为正数,需要在字符串前加上“0”。 如果你沉下心来,看仔细些,就不会有此一问了

111,096

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧