C#获取本机IP

[DllImport("Iphlpapi.dll")]
private static extern int SendARP(Int32 dest, Int32 host,
 ref Int64 mac, ref Int32 length);
[DllImport("Ws2_32.dll")]
private static extern Int32 inet_addr(string ip);
public string getLocalIP()
{
      string strHostName = Dns.GetHostName(); //得到本机的主机名
       IPHostEntry ipEntry = Dns.GetHostByName(strHostName); //取得本机IP
      string strAddr = ipEntry.AddressList[0].ToString();
      return (strAddr);
}

_________________________________________________________

原文

using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Management;

namespace exp_01_1021
{
class Program
{
static void Main(string[] args)
{
getHostInfo HostInfo = new getHostInfo();
string IP = HostInfo.getIP();
string Mac = HostInfo.getMac();
Console.WriteLine("Local IP: {0}", IP);
Console.WriteLine("MacAddress: {0}", Mac);
Console.ReadLine();
}
}
class getHostInfo
{
public string getIP() //获取IP
{
string HostName = Dns.GetHostName(); //得到主机名
IPHostEntry IpEntry = Dns.GetHostEntry(HostName); //得到主机IP
string strIPAddr = IpEntry.AddressList[0].ToString();
return (strIPAddr);
}
public string getMac() //获取Mac
{
string MacAddr = null;
ManagementObjectSearcher Query = new ManagementObjectSearcher

("select*fromWin32_NetworkAdapterConfiguration");
ManagementObjectCollection QueryCollection= Query.Get();
foreach (ManagementObject mo in QueryCollection)
{
if (mo["IPEnabled"].ToString() =="True")
MacAddr = mo["MacAddress"].ToString();
}
return (MacAddr);
}
}
}

//getIP类部分使用了两个类:Dns、IPHostEntry(在命名空间System.Net中).
//Dns类:主要是从域名系统(DNS)中检索关于特定主机的信息.
//IPHostEntry类则将一个域名系统或主机名与一组IP地址相关联,它与DNS类一起使用,用于获取主机的IP地址组.

//getMac类部分使用了两个类:ManagementObjectSearcher、ManagementObjectCollection.
//在获取本机的MAC地址时,可以使用WMI规范,通过SELECT语句提取MAC地址.在.NET框架中,WMI规范的实现定义在System.Management命名空间中.
//ManagementObjectSearcher类用于根据指定的查询检索管理对象的集合.
//ManagementObjectCollection类为管理对象的集合,上例中由检索对象返回管理对象集合赋值给它.

C#中MessageBox的使用

MessageBox,命名空间为using System.Windows.Forms;

函数: <整型> MessageBox(<字符串 Text, <字符串> Title, <整型> nType,MessageBoxIcon);

函数说明: 弹出一个消息框。

语法:参数: Text <字符串>,消息框的正文; Title <字符串>,消息框的标题; nType <整型>,消息框的类型。返回值:<整型>,用户在消息框上点击关闭时的选择的按钮。 MessageBoxIcon:对话框上显示的图标样式。

MessageBox.Show("消息内容", "返回值 确定1",
MessageBoxButtons.OK, MessageBoxIcon.Question);
DialogResult r1 = MessageBox.Show("消息内容", "返回值 确定1 取消2",

MessageBoxButtons.OKCancel,MessageBoxIcon.Asterisk);
int s1 = (int)r1;
if (s1 == 1) return;
//返回值的判断及处理或(DialogResult r1 = MessageBox.Show ( "消息,
"about!" ,MessageBoxButtons.AbortRetryIgnore , MessageBoxIcon.Question ))
MessageBox.Show("消息内容", "返回值 终止3 重试4 忽略5",
MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Error);
MessageBox.Show("消息内容", "返回值 是6 否7 取消2",
MessageBoxButtons.YesNoCancel, MessageBoxIcon.Exclamation);
MessageBox.Show("消息内容", "返回值 是6 否7",
MessageBoxButtons.YesNo, MessageBoxIcon.Hand);
MessageBox.Show("消息内容", "返回值 重试4 取消2",
MessageBoxButtons.RetryCancel, MessageBoxIcon.Information);

c#拆字程序

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication_chaizi
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
string cz1 = textBox1.Text.Trim();
string cz = "卧臣卜 项工页 功工力 ";//省略部分词库
string[] arr = cz.Split(' ');
string cz3="";
int i,k=0 ;
for (i = 0; i<= cz1.Length-1;i++)
{
foreach (string m in arr)
{
if (m.Substring(0, 1) == cz1.Substring(i,1))//20100412修改
{
int j = m.Length;
cz3 = cz3 + m.Substring(1, j - 1);
k++;
break;
}
}
if (k != 1)
{
cz3 = cz3 + cz1.Substring(i, 1);
}
else
{
k--;
}
}
textBox2.Text = cz3;
}
}
}

上学期,看到csdn上有朋友用Java写了个拆字程序,于是,就复制了他的字库,准备自己用C写一个,可惜中间处了点问题,代码丢了。

这学期开始学C#了,又想起了这个半途而废的程序,就用C#重写了个,还算顺利。

C#中Dictionary的用法及用途实例

Dictionary是一个泛型
他本身有集合的功能有时候可以把它看成数组
他的结构是这样的:Dictionary<[key], [value]>
他的特点是存入对象是需要与[key]值一一对应的存入该泛型
通过某一个一定的[key]去找到对应的值

举个例子:

//实例化对象

Dictionary dic = new Dictionary();
//对象打点添加
dic.Add(1, “one”);
dic.Add(2, “two”);
dic.Add(3, “one”);
//提取元素的方法
string a = dic[1];
string b = dic[2];
string c = dic[3];
//1、2、3是键,分别对应“one”“two”“one”
//上面代码中分别把值赋给了a,b,c
//注意,键相当于找到对应值的唯一标识,所以不能重复
//但是值可以重复
//摘录

SDL简介及开发环境创建

SDL简介

 SDL是一个自由的跨平台的多媒体开发包,适用于 游戏、游戏SDK、演示软件、模拟器、 MPEG播放器和其他应用软件。是为数不多的商业游戏开发公司使用的免费软件库之一。它提供跨平台的二维帧缓冲区图形和音频服务,它支持 Linux、Win32 和 BeOS。也不同程度地支持其它平台,包括 Solaris、IRIX、FreeBSD 和 MacOS。除了大量的服务,包括线程、独立于字节存储次序的宏和 CD 音频,SDL还提供了一个简单的 API,它允许您尽可能接近本机硬件。使用 SDL 有三重优点:稳定、简单和灵活。

  • 稳定   如果 SDL 不向 API 提供可靠的支持,那么那些爱好者和商业公司就不能使用它。因为使用了 SDL,就添加了错误修正并增强了性能,也就加强了 API 的强健性。就像内核开发是分步进行的,SDL 的开发也是分步进行的,其中一部分是可靠稳定的 API,其它部分是新功能和构思的沙箱。
  • 简单 SDL 被设计成一个简单的 API,以最少的代码实现您的构思。
  • 灵活 返回到上面的 Optimum 演示代码示例,只要移植到 SDL,并确定一些数据假设,那么根本不必改动代码,演示就可以在 Win32、BeOS 和 Linux 控制台上运行了。灵活性的另一方面体现在尽管代码完全是跨平台的,但不会把您和底层实现隔开。SDL 提供了函数 SDL_GetWMInfo(),该函数可以让您访问底层驱动程序的专用窗口信息。

在PC机上安装SDL开发环境


        和Linux下其他的软件库一样,SDL同样具有很强的移植性!我们所要做的就是在PC机上编写应用程序,调试通了以后就可以交叉编译移植到ARM板子上。到http://www.libsdl.org/download-1.2.php 下载SDL-1.2.13 (stable),然后进行安装,由于后面的交叉编译的是`tar.xx`
源码包,所以建议在PC机上使用`tar.xx`包进行安装。

        安装前请先查看是否安装有SDL,如果有请先卸载,如果你的系统使用的是`rpm软件安装包管理器`可以使用下面的命令进行查看:
# rpm -qa |grep SDL
如果使用`dpkg软件包管理器`,可以使用:
# dpkg -s SDL

下一步开始安装,这里以SDL-1.2.13.tar.gz 为例:
# cd /tmp
# wget http://www.libsdl.org/release/SDL-1.2.13.tar.gz
# tar zxf SDL-1.2.13.tar.gz
# cd SDL-1.2.13
# ./configure –help
使用上面这条命令用来查看`configure`选项信息,然后在这些选项中筛选必要的选项。
# ./configure –prefix=/usr/local/SDL –disable-video-x11 2>&1 | tee conf_log
`–prefix=/usr/local/SDL`是SDL的安装目录,此目录可以自己设定。
由于我的系统没有x11的开发环境,并且也不会用到SDL操作x11,因此我使用了`–disable-video-x11`这个选项。
参数`2>&1 | tee conf_log`的意思是把configure的信息输出到终端的同时写入到`conf_log`中,这个参数很有用,我们可以不用一直
 盯着屏幕看是否报错,等编译完成后直接查看`conf_log`这个文件即可,以后在`configure`、`make`等操作时,建议使用这个参数。
如果没有错误,执行:
# make 2>&1 | tee make_log
# make install
OK.PC 机上SDL安装完成。下面编译SDL的例子程序做测试:
# cd test
# ./configure –with-sdl-prefix=/usr/local/SDL
# make
# ./testwin
如果在屏幕上出现一张图片闪过说明SDL编译成功。

交叉编译SDL库


        由于ARM板的资源有限,不可能把所有的选项都开启,因此我们需要根据实际情况进行选择,下面的选项一般可以满足我们的要求:
# ./configure –prefix=/work/SDL_arm CC=arm-linux-gcc –host=arm-linux –target=linux –disable-debug –disable-cdrom –disable-esd –disable-arts –disable-arts-shared –disable-diskaudio –disable-nas –disable-esd-shared –disable-mintaudio –disable-nasm –disable-video-x11 –disable-video-dga –disable-dga –disable-video-ps2gs –disable-video-xbios –disable-video-gem –disable-video-opengl –disable-directx –disable-stdio-redirect –disable-osmesa-shared 2>&1 | tee conf_log
如果没有报错就可以进行编译:
# make 2>&1 | tee make_log
如果报错的话就需要根据出错信息调整一下`configure`的选项参数后编译(参数调整后没有必要`make clean`,直接`make` 就行了,make工具会智能的探寻哪些目标需要编译)。如果没有错误就可以`make install`了。
# make install

下一步测试交叉编译的SDL库是否能在ARM上正常使用。
交叉编译SDL的例子程序
# cd test
# ./configure CC=arm-linux-gcc –host=arm-linux –with-sdl-prefix=/work/SDL_arm
# make

如果报错的话,根据错误提示进行修改。

把交叉编译的库通过nfs服务器 共享到ARM板。
# cp /work/SDL_arm/lib/libSDL-1.2.so.0.11.2 $NFS_ROOTDIR
# cp ./testwim $NFS_ROOTDIR

做SDL库文件的软链接(SDL动态库使用libSDL-1.2.so.0这个名字提供服务)。
# cd $NFS_ROOTDIR
# ln -s libSDL-1.2.so.0.11.2 libSDL-1.2.so.0

执行下列操作:

启动nfs服务器
启动ARM
通过minicom 登录ARM
挂载nfs共享文件夹
运行例子程序`testwin`
如果运行成功就说明移植成功,失败的话不用心慌,认真的参考出错信息查找出错原因。

编写SDL程序

转载自CSDN

C 字符串分割函数strtok()的一些说明

调用方式:char *strtok(char *str1,char *str2);
功能说明:函数strtok()返回字符串str1中指向一个由str2所指定的字符或者字符串的分隔符的指针,当没有要返回的分隔符时,就返回一个空指针。

函数strtok()实际上修改了有str1指向的字符串。每次找到一个分隔符后,一个空(NULL)就被放到分隔符处,函数用这种方法来连续查找该字符串。

例子:

#include
#include

int main( int argc, char *argv[] )
{
char *p;
char str[100]=”This is a test,and you can use it”;
p = strtok(str,” “); // 注意,此时得到的 p为指向字符串:”This”,即在第一个分隔符前面的字符串,即每次找到一个分隔符后,一个空(NULL)就被放到分隔符处,所以此时NULL指针指向后面的字符串:”is a test ,and you can use it”。

printf(“%s\n”,p); //此时显示:This
do
{
p = strtok(NULL, “,”); //NULL即为上面返回的指针,即字符串:”is a test ,and you can use it”。
if(p)
printf(“|%s”,p);
}while(p);

return 0;
}