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#的结果一样


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

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2021-05-22 10:57
社区公告

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