因为需要一段C语言实现的代码,无奈不了解其个中原理,想翻译为C#或python却有心无力,没有办法只有将C语言代码写成api函数,生成DLL,在C#中调用就算了吧
首先要有一个dll文件,其代码如下:
encore.c
Code
1 #define _UAPI __declspec(dllexport)
2 //定义宏
3
4 _UAPI char *FToC(float f, int *a0, int *a1, int *a2, int *a3)
5 {
6 unsigned char a[4];
7 memcpy(a, &f, 4);
8 *a0 = (int)a[0];
9 *a1 = (int)a[1];
10 *a2 = (int)a[2];
11 *a3 = (int)a[3];
12 return a;
13 }
14
15 //将转换而来的整数存储与四个变量中
1 #define _UAPI __declspec(dllexport)
2 //定义宏
3
4 _UAPI char *FToC(float f, int *a0, int *a1, int *a2, int *a3)
5 {
6 unsigned char a[4];
7 memcpy(a, &f, 4);
8 *a0 = (int)a[0];
9 *a1 = (int)a[1];
10 *a2 = (int)a[2];
11 *a3 = (int)a[3];
12 return a;
13 }
14
15 //将转换而来的整数存储与四个变量中
使用cl.exe工具编译它:cl /LD enCore.c,生成enCore.dll文件备用
在C#中调用它
Code
1 using System;
2 using System.Runtime.InteropServices;
3 public class MainClass
4 {
5 [DllImport("enCore.dll",
6 EntryPoint="FToC",
7 CharSet=CharSet.Auto,
8 CallingConvention=CallingConvention.StdCall
9 )]
10 public static extern string FToC( float x, ref int a0, ref int a1, ref int a2, ref int a3);
11
12 static void Main(string[] args)
13 {
14 int a0 = 0, a1 = 0, a2 = 0, a3= 0;
15 string x = FToC((float)127.123, ref a0, ref a1, ref a2, ref a3);
16 Console.WriteLine("{0}{1}{2}{3}",
17 Convert.ToString(a0, 16),
18 Convert.ToString(a1, 16),
19 Convert.ToString(a2, 16),
20 Convert.ToString(a3, 16));
21 }
22 }
23
1 using System;
2 using System.Runtime.InteropServices;
3 public class MainClass
4 {
5 [DllImport("enCore.dll",
6 EntryPoint="FToC",
7 CharSet=CharSet.Auto,
8 CallingConvention=CallingConvention.StdCall
9 )]
10 public static extern string FToC( float x, ref int a0, ref int a1, ref int a2, ref int a3);
11
12 static void Main(string[] args)
13 {
14 int a0 = 0, a1 = 0, a2 = 0, a3= 0;
15 string x = FToC((float)127.123, ref a0, ref a1, ref a2, ref a3);
16 Console.WriteLine("{0}{1}{2}{3}",
17 Convert.ToString(a0, 16),
18 Convert.ToString(a1, 16),
19 Convert.ToString(a2, 16),
20 Convert.ToString(a3, 16));
21 }
22 }
23