在基于C#的网络通讯中,上位机将有发送的浮点数f转换为16进制数
float f = 12f;
string s = BitConverterToString(BitConverterGetBytes(f))Replace( "- ", " ");
在C#中,下位机返回的16进制浮点数,先去除数据“FF FF FF FF”中的空格,
再按2个字符一截取的转换为十进Byte数组后用BitConverterToSingle()方法将数据转换为f1,fiToString()转换字符串。
//s = sReplace( " ", " ");//如果中间有空格
byte[] arr = new byte[sLength / 2];
for (int i = 0; i < sLength / 2; i++)
{
arr[i] = ConvertToByte(sSubstring(i 2, 2), 16);
}
float f1 = BitConverterToSingle(arr, 0);
Text = f1ToString();import javautilScanner;
public class Binary2Hex {
private static String hexStr = "0123456789ABCDEF";
/
@param bytes
@return 将二进制转换为十六进制字符输出
/
public static String BinaryToHexString(byte[] bytes){
String result = "";
String hex = "";
for(int i=0;i<byteslength;i++){
//字节高4位
hex = StringvalueOf(hexStrcharAt((bytes[i]&0xF0)>>4));
//字节低4位
hex += StringvalueOf(hexStrcharAt(bytes[i]&0x0F));
result +=hex;
}
return result;
}
public static void main(String[] args) {
Scanner sca = new Scanner(Systemin);
boolean flag = true;
while (flag) {
Systemoutprint("请输入一个二进制字符串:");
String str = scanext();
Systemoutprintln();
Systemoutprintln("您输入的是字符串的十六进制为:"+BinaryToHexString(strgetBytes()));
Systemoutprint("是否继续转化(如果不继续请输入“exit”,继续的话输入任意字符):");
String _str = scanext();
if (_strequalsIgnoreCase("exit")) {
flag = false;
}
}
}
}查jdk文档,可以发现在long类里面有这些方法
static String toBinaryString(long i)
以二进制无符号整数形式返回 long 参数的字符串表示形式。
static String toHexString(long i)
以十六进制无符号整数形式返回 long 参数的字符串表示形式。
static String toOctalString(long i)
以八进制无符号整数形式返回 long 参数的字符串表示形式。
如果你自己要写一个程序 实现这个功能,
就是将数字除16取余。。。把十进制数变成二进制数,负数可以用补码来表示,然后再三位一断转成八进制,( 四位一断则成十六进制) 在数据里只有正数没有负数,负数在计算机存储是前面加一个1就行了,计算时按正数计算(617)10=(1001101001)2。负的二进制数1001101001用16位的补码来表示,就是1000 0010 0110 1001取反+1,即1111 1101 1001 0110+1=1111 1101 1001 0111=FD97
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)