short转换为字符串

bj168 2009-11-18 09:26:17
函数名 long GetEventRecvSms(short * PhoneNumber, short * SMSContent);
函数描述 取模块中的短信接收事件
参数描述 PhoneNumber 短信发送号码
SMSContent 短信内容


请问C#里如何将这里的short类型转换为字符串类型呢?谢谢。
...全文
715 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuyuguo1 2009-11-18
  • 打赏
  • 举报
回复
上面几位已经说的很清楚了。
gomoku 2009-11-18
  • 打赏
  • 举报
回复
我认为那个短信dll是个设计不好的例子。

比如它说明书中的接口函数11是:
CString GetRunInfo();
问题是CString不是简单类型,是一个类。客户的编译器不一定和原dll编译器相同,它们理解CString的布局,构造,以及析构也不一定相同。这就导致了可能的内存泄露甚至非法指针操作。

同样,C#也不能理解CString,不能直接用这种导出函数。

回头看long GetEventRecvSms(short * PhoneNumber, short * SMSContent);
用short(0~65535)来表示电话号码明显是不妥的。只能理解它要求传入一个short数组。

一个双字节的UniCode正好是一个short,这还说得过去。但是,单单传入地址,C++并不知道数组的长度。
也就可能发生缓冲溢出。

比较常见的导出函数是一般这么写:
int GetEventRecvSms(LPWSTR PhoneNumber, int& lenPhoneNumber, LPWSTR SMSContent, int& lenSMSContent);
其中LPWSTR要求传入双字节的字符串缓冲,int&用来表示缓冲的大小(以及实际填充的大小)。


如果不担心上诉问题,C#可以这样调用:
[DllImport("...", CharSet = CharSet.Unicode)]
extern static int GetEventRecvSms(StringBuilder PhoneNumber, StringBuilder SMSContent);

wuyq11 2009-11-18
  • 打赏
  • 举报
回复
short * SndData
System.UInt16 SndData
System.UInt16[] SndData
C++ C#
char* string
传出的char* StringBuilder
short short
char byte
char[n] fixed byte[n]
结构指针 结构指针
函数指针 委托
结构体数组使用IntPtr
http://topic.csdn.net/u/20090225/15/a6bc50ad-9721-4749-b189-dc4a4bc045a1.html
lzsh0622 2009-11-18
  • 打赏
  • 举报
回复
short* 用byte[]试试 16位
lzsh0622 2009-11-18
  • 打赏
  • 举报
回复
数据类型问题

DLL声名中
short 换成  .net环境下的 System.Int16
zhujiazhi 2009-11-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hero7086 的回复:]
来晚了。。。。那么祝楼主吃好睡香!
[/Quote]
...

hero7086 2009-11-18
  • 打赏
  • 举报
回复
来晚了。。。。那么祝楼主吃好睡香!
asdfg_ 2009-11-18
  • 打赏
  • 举报
回复
.ToString()
lee_b 2009-11-18
  • 打赏
  • 举报
回复

short i = 12;
string str = Convert.ToString(i);

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧