首页 / C# / 将十六进制枚举参数从C#传递给C
将十六进制枚举参数从C#传递给C
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了将十六进制枚举参数从C#传递给C,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1205字,纯文字阅读大概需要2分钟。
内容图文
![将十六进制枚举参数从C#传递给C](/upload/InfoBanner/zyjiaocheng/777/58ba1046f1eb491ab90fd8b886c8fd07.jpg)
我在C中有一个接受十六进制参数的函数.我需要从C#调用这个函数.我目前的方法似乎不正确,因为我的C函数返回错误的数字.
这是我的C函数的声明:
enum tags {
TAG_A = -1,
TAG_B = 0x00,
TAG_C = 0xC1,
...
};
int myfunction(enum tags t);
这是我的C#代码:
enum tags {
TAG_A = -1,
TAG_B = 0x00,
TAG_C = 0xC1,
...
}
[DllImport ("mylibraryname")]
public static extern int myfunction(tags t);
myfunction(tags.TAG_B);
我在Mac上,我正在使用Mono和Xcode来完成所有这些工作.可以假定C函数是正确的,因为它是我下载的开源库.我认为十六进制数字有问题,但我不确定.
解:
我已经勾选了一个答案,但实际上设置C#enum很长时间才解决了我的问题.所以在C#中,我有:
enum tags : long {
TAG_A = -1,
TAG_B = 0x00,
TAG_C = 0xC1,
…
}
解决方法:
十六进制只是表达文字整数值的一种不同方式.这与你的问题无关.例如,TAG_B = 0x00和TAG_B = 0都意味着完全相同的事情.
问题可能是C enum是16位整数,而C#enum是32位.而不是在C#中创建枚举,尝试直接使用Int32值:
static class tags
{
public static short TAG_A = -1;
public static short TAG_B = 0x00;
public static short TAG_C = 0xC1;
// ...
}
[DllImport ("mylibraryname")]
public static extern int myfunction(short t);
myfunction(tags.TAG_B);
或者,正如L.B建议的那样,您只需设置枚举成员的类型:
enum tags:short
{
TAG_A = -1,
TAG_B = 0x00,
TAG_C = 0xC1,
// ...
}
内容总结
以上是互联网集市为您收集整理的将十六进制枚举参数从C#传递给C全部内容,希望文章能够帮你解决将十六进制枚举参数从C#传递给C所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。