我在将包含8个字节的字符串^作为字符(ascii)转换为double时遇到问题。 我想取这8个字符并将它们转换为二进制。
您建议在C ++ / cli中进行此转换?
我试图使用Marshal :: Copy,Double :: TryParse等
也许我使用错误的参数规格,但我真的失去了我最后的希望。 必须有一些容易做到这种转换的事情。
感谢。
答案 0 :(得分:1)
好消息是, System.String 类在内部仅使用 Unicode编码。
因此,如果你给它字节,它会将它们映射到隐藏原始值的内部编码。
好消息是你可以使用 System.Text.Encoding 类来检索对应于unicode字符的8位值。
以下是一个示例:
#include <iostream>
using namespace System;
using namespace System::Text;
int main()
{
int n = 123456;
double d = 123.456;
std::cout << n << std::endl;
std::cout << d << std::endl;
char* n_as_bytes = (char*)&n;
char* d_as_bytes = (char*)&d;
String^ n_as_string = gcnew String(n_as_bytes, 0, sizeof(n));
String^ d_as_string = gcnew String(d_as_bytes, 0, sizeof(d));
Encoding^ ascii = Encoding::GetEncoding("iso-8859-1");
array<Byte>^ n_as_array = ascii->GetBytes(n_as_string);
array<Byte>^ d_as_array = ascii->GetBytes(d_as_string);
cli::pin_ptr<unsigned char> pin_ptr_n = &n_as_array[0];
cli::pin_ptr<unsigned char> pin_ptr_d = &d_as_array[0];
unsigned char* ptr_n = pin_ptr_n;
unsigned char* ptr_d = pin_ptr_d;
int n_out = *(int*)ptr_n;
double d_out = *(double*)ptr_d;
std::cout << n_out << std::endl;
std::cout << d_out << std::endl;
return 0;
}
这应该给你:
123456
123.456
123456
123.456
不确定它是否完全安全,但在您的环境中尝试它应该是确保其可行性的良好开端。 :)