一段代码求翻译成C#

pengwu666 2016-08-23 02:35:09
private byte[] getRamFormatValue(double mValue) {
byte[] mTemp = new byte[8];
String mStr = Double.toHexString(mValue);
long mRamE = Integer.parseInt("" + mStr.charAt(mStr.length() - 1), 16);
mRamE = mRamE + 1023;
mTemp[7] = (byte) ((mRamE >> 4) & 0xFF);
mTemp[6] = (byte) (mRamE & 0x0F);
String mSub = mStr.substring(mStr.indexOf(".") + 1, mStr.indexOf("p"));
if (mSub.length() < 13) {
for (int i = mSub.length(); i < 13; i++) {
mSub = mSub + "0";
}
}
mRamE = Integer.parseInt(mSub.substring(0, 1), 16);
mTemp[6] = (byte) ((mTemp[6] << 4) | (mRamE & 0xFF));
mSub = mSub.substring(1);
for (int i = 0; i < 6; i++) {
int mTempFirst = Integer.parseInt(mSub.substring(2 * i, 2 * i + 1), 16);
int mTempLast = Integer.parseInt(mSub.substring(2 * i + 1, 2 * i + 2), 16);
mTemp[5 - i] = (byte) (mTempFirst << 4 | mTempLast);
}

return mTemp;
}
...全文
409 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
robake 2016-08-30
  • 打赏
  • 举报
回复
引用 9 楼 hjq624779687 的回复:
看起来和C#貌似没有啥区别。。。
java和C#在基础的语法上并没有多少差别
robake 2016-08-30
  • 打赏
  • 举报
回复
引用 8 楼 pengwu666 的回复:
[quote=引用 7 楼 robake 的回复:] integer.parseInt相当于int.parseint,转换成int double.tohexString是转换成16进制的字符串 mStr.charAt(mStr.length() - 1)这是取最后一位的位置的字符,相当于C#里的substring
double.tohexString是转换成16进制的字符串 这一句不懂了,16进制不也是0A 0B 这样的形式吗, 0.1 0x1.999999999999ap-4 1 0x1.0p0 10 0x1.4p3 是什么情况,这样的16进制?[/quote] 0A,这确实是16进制的,toHexString是转成了"0A",C#里就是字符串。
夏天的枫 2016-08-30
  • 打赏
  • 举报
回复
看起来和C#貌似没有啥区别。。。
pengwu666 2016-08-30
  • 打赏
  • 举报
回复
引用 7 楼 robake 的回复:
integer.parseInt相当于int.parseint,转换成int double.tohexString是转换成16进制的字符串 mStr.charAt(mStr.length() - 1)这是取最后一位的位置的字符,相当于C#里的substring
double.tohexString是转换成16进制的字符串 这一句不懂了,16进制不也是0A 0B 这样的形式吗, 0.1 0x1.999999999999ap-4 1 0x1.0p0 10 0x1.4p3 是什么情况,这样的16进制?
robake 2016-08-29
  • 打赏
  • 举报
回复
integer.parseInt相当于int.parseint,转换成int double.tohexString是转换成16进制的字符串 mStr.charAt(mStr.length() - 1)这是取最后一位的位置的字符,相当于C#里的substring
pengwu666 2016-08-29
  • 打赏
  • 举报
回复
引用 5 楼 xuzuning 的回复:
直译肯定是不行的 C# 没有对应的 Double.toHexString(mValue) 0.1 0x1.999999999999ap-4 1 0x1.0p0 10 0x1.4p3 1000000 0x1.e848p19 Integer.parseInt("" + mStr.charAt(mStr.length() - 1), 16) 取的是套红部分
Double.toHexString(mValue)这个是什么意思 Integer.parseInt取的是最后一位?那是不是left差不多的功能
xuzuning 2016-08-24
  • 打赏
  • 举报
回复
直译肯定是不行的 C# 没有对应的 Double.toHexString(mValue) 0.1 0x1.999999999999ap-4 1 0x1.0p0 10 0x1.4p3 1000000 0x1.e848p19 Integer.parseInt("" + mStr.charAt(mStr.length() - 1), 16) 取的是套红部分
robake 2016-08-24
  • 打赏
  • 举报
回复
引用 3 楼 qq_20324803 的回复:
[quote=引用 2 楼 robake 的回复:] length()去掉(),integer改成int就可以,long保留吧 你那代码是java代码,大部分都是跟C#一样的
呀我犯低级错误了。。。是long。不过我平常都是用Int64.。。。long已经好久没用过了。我怕乱。[/quote] 呃,好像是使用C风格语言的都不怎么爱用Long,VB里头是Long,没int64,我是从VB转过来的,而且,也能搞点java代码, 所以楼主的代码比较好改成C#的。
摇撼大地 2016-08-23
  • 打赏
  • 举报
回复
引用 2 楼 robake 的回复:
length()去掉(),integer改成int就可以,long保留吧 你那代码是java代码,大部分都是跟C#一样的
呀我犯低级错误了。。。是long。不过我平常都是用Int64.。。。long已经好久没用过了。我怕乱。
robake 2016-08-23
  • 打赏
  • 举报
回复
length()去掉(),integer改成int就可以,long保留吧 你那代码是java代码,大部分都是跟C#一样的
摇撼大地 2016-08-23
  • 打赏
  • 举报
回复
感觉直接复制黏贴都可以了啊。。。。。就是Integer那个需要改下吧。long改成float

110,554

社区成员

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

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

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