请问c#字符串 指针 int之间怎么转换啊

Byte_code 2011-01-18 05:06:23
1. 已知string str = "TEST!" 要求使指针 IntPtr p指向str或指针p的内容和str相同。
2. int i = 0x80; IntPtr p = new IntPtr(i); int这样转换成指针对吗?
3. IntPtr p = new IntPtr(0x80); int i = p.ToInt32(); 指针这样转换成int对吗?
4. 假如IntPtr p指向字符串"TEST!",怎么把p指向的字符串赋给一个string类型。

谢谢!
...全文
811 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
lizhibin11 2011-01-19
  • 打赏
  • 举报
回复
用ref引用传递
csdn上也有相关文章例如这篇
http://blog.csdn.net/tanliyoung/archive/2006/09/14/1222186.aspx
Byte_code 2011-01-19
  • 打赏
  • 举报
回复
我提这个问题主要是因为不知道怎么在C#中用SendMessage(WM_COPYDATA)来通信:
两个进程用SendMessage(WM_COPYDATA)来通信(主要是发送和接收字符串),其中有一个程序是用C#写的,请问怎么做?要求有发送字符串及接收后的字符串解析!谢谢!

谢谢各位的回复!
lizhibin11 2011-01-19
  • 打赏
  • 举报
回复
此外还有一些情况必须用到指针,比如使用win32 API进行录放音,以及获取字符点阵等。
lizhibin11 2011-01-19
  • 打赏
  • 举报
回复
C#中使用指针在效率提升上有一定作用,尤其是在栈上的内存分配。
C#中指针的使用,很多情况下可以避免新对象的生成。
但对于C#的类和数据结构来说,没有必要使用指针。
vrhero 2011-01-19
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 yuwenge 的回复:]
引用 5 楼 sp1234 的回复:

你上一条刚刚取得指针,下一条语句执行时数据就可能浮动到内存别的地方了,这就是.net。

Unsafe代码中的指针都会乱跑的么?
[/Quote]
只有非托管资源的指针才是不变的(暂时)...托管资源指针无意义...

另外...指针长度因系统而异,只有32位系统才是int,64位系统是long...这也是微软为什么要搞IntPtr结构,就是为了消除平台差异...
卧_槽 2011-01-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sp1234 的回复:]

你上一条刚刚取得指针,下一条语句执行时数据就可能浮动到内存别的地方了,这就是.net。
[/Quote]
Unsafe代码中的指针都会乱跑的么?
yucuihaimeng 2011-01-19
  • 打赏
  • 举报
回复
哦 没看到 unsafe...
yucuihaimeng 2011-01-19
  • 打赏
  • 举报
回复
C#中不用指针来处理的。。。 楼上申请个int* x会得到错误:“指针和固定大小缓冲区只能在不安全的上下文中使用”
lizhibin11 2011-01-18
  • 打赏
  • 举报
回复
第二三个问题,除了可以使用上面string的方法,也可以直接写不安全代码。
static unsafe void Main(string[] args)
{
fixed (int* x = new int[1])
{
*x = 5;
Console.WriteLine(x[0]);
byte y = *((byte*)x);
Console.WriteLine(y);
}
}
lizhibin11 2011-01-18
  • 打赏
  • 举报
回复
先说第一个问题和第四个问题
string str = "TEST!";
GCHandle gh = GCHandle.Alloc(str, GCHandleType.Pinned);
IntPtr itp = gh.AddrOfPinnedObject();//获得指针
Marshal.WriteByte(itp, 5);//将byte写入指针,其中第一个参数itp可以+1,+2等。
doubleu2005 2011-01-18
  • 打赏
  • 举报
回复
C#一般不用指针的,这也是它的特点吧,用指针的话还是C或C++
wuyq11 2011-01-18
  • 打赏
  • 举报
回复
NET不用指针,C#中字符串不需要指针操
  • 打赏
  • 举报
回复
你上一条刚刚取得指针,下一条语句执行时数据就可能浮动到内存别的地方了,这就是.net。
  • 打赏
  • 举报
回复
你用int.Parse()或者Convert.ToInt16试试!
龍过鸡年 2011-01-18
  • 打赏
  • 举报
回复
new IntPtr(int) int -> point
IntPtr.ToInt32 point -> int

IntPtr 结构

110,536

社区成员

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

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

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