gzcjx555
QQ 296686949
級別: 工控俠客
|
請廣大網友幫忙把編程語言給轉換一下 public string float_TO_string(float fl) { byte[] a = BitConverter.GetBytes(fl); return a[0].ToString("X2") + a[1].ToString("X2") + a[2].ToString("X2") + a[3].ToString("X2"); } public string float_TO_string(double dl) { byte[] a = BitConverter.GetBytes(dl); return a[0].ToString("X2") + a[1].ToString("X2") + a[2].ToString("X2") + a[3].ToString("X2")+ a[4].ToString("X2") + a[5].ToString("X2") + a[6].ToString("X2") + a[7].ToString("X2"); } public float string_TO_float(string f1) { byte[] a = new byte[4]; a[0] = Convert.ToByte(f1.Substring(0, 2)); a[1] = Convert.ToByte(f1.Substring(2, 2)); a[2] = Convert.ToByte(f1.Substring(4, 2)); a[3] = Convert.ToByte(f1.Substring(6, 2)); return BitConverter.ToSingle(a, 0); } public double string_TO_double(string d1) { byte[] a = new byte[8]; a[0] = Convert.ToByte(d1.Substring(0, 2)); a[1] = Convert.ToByte(d1.Substring(2, 2)); a[2] = Convert.ToByte(d1.Substring(4, 2)); a[3] = Convert.ToByte(d1.Substring(6, 2)); a[4] = Convert.ToByte(d1.Substring(8, 2)); a[5] = Convert.ToByte(d1.Substring(10, 2)); a[6] = Convert.ToByte(d1.Substring(12, 2)); a[7] = Convert.ToByte(d1.Substring(14, 2)); return BitConverter.ToDouble(a, 0); } |
|
---|---|---|
|
zlcp123
級別: 工控俠客
|
看上去就是十六進制的字符串與單雙精浮點數的互相轉換,既然你會C++應該可以按功能自己寫一個 “42F6E979”<=>1.23456E+2 和 “405EDD2F1A9FBE77”<=>1.23456E+2 就是這么個東西 [ 此帖被zlcp123在2024-03-06 09:28重新編輯 ] |
---|---|
|
gzcjx555
QQ 296686949
級別: 工控俠客
|
我會c#,不會c++,這個好像有點區別 |
|
---|---|---|
|
已翻身的咸魚
級別: 略有小成
|
#include <iostream> #include <vector> std::string float_TO_string(float fl) { std::vector<unsigned char> a(sizeof(float)); memcpy(&a[0], &fl, sizeof(float)); std::string result; for (unsigned char byte : a) { char hex[3]; snprintf(hex, sizeof(hex), "%02X", byte); result += hex; } return result; } std::string float_TO_string(double dl) { std::vector<unsigned char> a(sizeof(double)); memcpy(&a[0], &dl, sizeof(double)); std::string result; for (unsigned char byte : a) { char hex[3]; snprintf(hex, sizeof(hex), "%02X", byte); result += hex; } return result; } float string_TO_float(std::string f1) { std::vector<unsigned char> a(4); for (int i = 0; i < 4; ++i) { a = std::stoul(f1.substr(i * 2, 2), nullptr, 16); } float fl; memcpy(&fl, &a[0], sizeof(float)); return fl; } double string_TO_double(std::string d1) { std::vector<unsigned char> a(8); for (int i = 0; i < 8; ++i) { a = std::stoul(d1.substr(i * 2, 2), nullptr, 16); } double dl; memcpy(&dl, &a[0], sizeof(double)); return dl; } int main() { // 測試轉換函數 float f = 3.14f; double d = 6.28; std::string floatHex = float_TO_string(f); std::string doubleHex = float_TO_string(d); std::cout << "Float to Hex String: " << floatHex << std::endl; std::cout << "Double to Hex String: " << doubleHex << std::endl; float convertedFloat = string_TO_float(floatHex); double convertedDouble = string_TO_double(doubleHex); std::cout << "Hex String to Float: " << convertedFloat << std::endl; std::cout << "Hex String to Double: " << convertedDouble << std::endl; return 0; } |
---|---|
本帖最近評分記錄: |