for (int i = 0; i < strInput.Length; i++) {
string str = "0000" + ((int)strInput[i]).ToString("X");
txt += str.Substring(str.Length - 4);
}第一句变量txt应该是strInput吧

解决方案 »

  1.   

    xixigongzhu(夕夕公主) 的可行
      

  2.   

    xixigongzhu(夕夕公主)非常不错!完全可行!还有一问题:
    以下是我用VB描述的请用C#写一下,
    '三个控件
    '1.MSCCom 串口通讯控件
    '2.cmdCnn  连接按钮控件
    '3.Lbl(2) label控件用于显示连接状态。'以下是一个连接按钮事件源码..
    Private Sub cmdCnn_Click()
        On Error GoTo err
        Dim strTemp As String '定义字符串变量
        Dim Buffer '定义变体变量,在返回的信息中找"OK"
    '如果端口没打开,就打开!    
        If MSCCom.PortOpen = False Then
            MSCCom.PortOpen = True
        End If    MSCCom.InBufferCount = 0
    '发送字符串 "AT" + 回车键
        strTemp = "AT" + vbCr
    '发送..
        MSCCom.Output = strTemp
        
        Dim T As Single '定义一个单精度变量
        Dim L As Integer '定义一个整型变量    T = Timer 'Timer 是VB中的一个函数 它体现了现在的秒数它一直在走
        
      '循环 
      Do
            Lbl(2).Caption = "COM1 已打开," & Chr(13) & "正在连接手机 ..."
            Buffer = Buffer + MSCCom.Input
            L = InStr(1, Buffer, "OK" & vbCrLf) '在返回的信息中打 "OK" 字符串
        Loop Until L <> 0 Or Timer - T > 2 '直到 L不等于0也就是找到OK了,或者是(Timer - T > 2)大于两秒中就退出循环
        
      If L = 0 Then '2钟后没找到OK
            Lbl(2).Caption = "设备没有连线接好," & Chr(13) & "请检查与设备有关线路。"
        Else
        '找到了。
            Lbl(2).Caption = "COM1 已打开," & Chr(13) & " 手机连接正常."
        End If
        
        Exit Sub
    err:
        MsgBox "Error ! " & err.Description, vbCritical, "Error !!"
    Exit Sub
    End Sub
      

  3.   

    我只需要以下代码,谢谢!!!!
    T = Timer 'Timer 是VB中的一个函数 它体现了现在的秒数它一直在走
        
      '循环 
      Do
            Lbl(2).Caption = "COM1 已打开," & Chr(13) & "正在连接手机 ..."
            Buffer = Buffer + MSCCom.Input
            L = InStr(1, Buffer, "OK" & vbCrLf) '在返回的信息中打 "OK" 字符串
        Loop Until L <> 0 Or Timer - T > 2 '直到 L不等于0也就是找到OK了,或者是(Timer - T > 2)大于两秒中就退出循环
      

  4.   

    float T = Environment.TickCount;
    int L;
    string Buffer = null;
    do {
     Lbl[2].Caption = "COM1 已打开," + (char)13 + "正在连接手机 ...";
     Buffer += MSCCom.Input;
     L = CultureInfo.CurrentCulture.CompareInfo.IndexOf(Buffer, "OK\r\n", 1, CompareOptions.IgnoreCase);
    } while(L != 0 || Environment.TickCount - T > 2);
      

  5.   

    夕夕公主;真乃高人也,Super 佩服!
    祝圣诞快乐,身体健康!
      

  6.   

    夕夕公主运行时出现:
    D:\CS\SendC#\SMS\Form1.cs(314): 找不到类型或命名空间名称“CompareOptions”(是否缺少 using 指令或程序集引用?)
    D:\CS\SendC#\SMS\Form1.cs(314): 找不到类型或命名空间名称“CultureInfo”(是否缺少 using 指令或程序集引用?)CompareOptions
    CultureInfo
    是不是没有定义,还是没有引用类?请公主明示。
      

  7.   

    using System.Globalization;
    using System.Threading;
    我引用了它们就行了,还在测试中..
      

  8.   

    CompareOptions
    CultureInfo都需要在页面中进行定义,你试着用鼠标右键,转到定义看一下是否存在,如没有,就该找xixigongzhu(夕夕公主) 了,不过代码是她给你的,估计也就是她的问题了。
      

  9.   

    像这样的找不到class的错误,有个办法解决,如果有sdk文档的话:帮助菜单下有个索引菜单项(或者Ctrl+Alt+F2),在输入框输入class的名字,在下面的结果列表中如果有对应的项(class名字+"类"),单击这个项,在具体的描述页单击第一行的class名字+" 概述"(如果有),在新出现的页会看见这个类的全名(包括命名空间),只要引用这个命名空间即可。
      

  10.   

    这些类都是很基础的东东,如果想更好的应用API,这些类都必须熟悉。
      

  11.   

    Environment.TickCount - T > 2 should be Environment.TickCount - T > 2000
      

  12.   

    and in .net windows forms, there is no Caption Properties, it should be Text.
    if you want a newline, is better use Environment.NewLine
      

  13.   

    公主:我试了一下是个死循环,跳不出去。
    可能你还没明白我的意思:以下代码要求在buffer变量中,循环中找“OK”字符串,
    只到找到就退出循环。或超过2秒也跳出,不然会当机的。
    Do
            Lbl(2).Caption = "COM1 已打开," & Chr(13) & "正在连接手机 ..."
            Buffer = Buffer + MSCCom.Input
            L = InStr(1, Buffer, "OK" & vbCrLf) '在返回的信息中找 "OK" 字符串
    Loop Until L <> 0 Or Timer - T > 2 '直到L不等于0也就是找到OK字符串了,或者是超过2秒的话自动退出循环,免当机了。以下是C# 一下按钮事件!code,帮忙看看。
    private void btnCnn_Click(object sender, System.EventArgs e)
    {

    try
    {


    if (MSCom.PortOpen){
    MessageBox.Show("端口已打开!");}
    else
    {
    MSCom.PortOpen =true;
    btnCnn.Enabled =false;
    // label1.ForeColor=;
    label1.Text="COM1已打开!";
    }
    MSCom.InBufferCount = 0;
        MSCom.Output = "AT" +(char)13; int T = Environment.TickCount;
    int L;
    string Buffer = null;

    do
    {
    label1.Text  = "COM1 已打开," + (char)13 + "正在连接手机 ...";
    Buffer += MSCom.Input;
    L = CultureInfo.CurrentCulture.CompareInfo.IndexOf(Buffer, "OK\r\n", 1, CompareOptions.IgnoreCase);
    int textBox4=Environment.TickCount;
    } while(L != 0 || Environment.TickCount - T > 2000);


    }
    catch(System.Exception ex)
    {
    MessageBox.Show(ex.Message);
    }
    }
      

  14.   

    有没有看见cqing() 的回复?将2改成2000再看看
      

  15.   

    夕夕公主,cqing() 你就救救俺吧,俺试了N+1次了,俺对VB很精,对C#不懂。求教了。还是NO,运行一会就没反应了。当前窗口就没响应了。
    DoEvents()
    怎么用?
      

  16.   

    你在do循环的第一句插上:
    Console.WriteLine(Environment.TickCount+"************"+T);
      

  17.   

    谢谢,您不烦的教我!
    根据你的指点,我输出了一下值:发现:
    while(L != 0 || Environment.TickCount - T > 2);这句是并列式,我要的是或者关系,请写一下。
      

  18.   

    while(L == 0 & Environment.TickCount - T <= 5000);
    这样就行了,
    当 L=0退出,Environment.TickCount - T 小于等于5000时也退出。
    谢谢了。公主。
      

  19.   

    不好意思,是我搞错了,应该是这样:
    while(L == -1 && Environment.TickCount - T <= 2000);
      

  20.   

    最好L为-1,因为-1表示没找到,在VB中0才表示没找到
      

  21.   

    我要好好谢谢您,您解决了我大部分问题了,
    我在写一个用手机发短信程式。VB已写出来了,所以想用C#写一下。
    C#的思想,与VB差异很大呀。
    还有点问题,发送“AT”命令后不能返回字符串。正在试,谢谢你了,唉真不知该叫你什么好呢。我的QQ9066818。
      

  22.   

    估计你的控件返回的是char[]格式的数据,在VB里可以自动转换为string,但是C#是不行的,要用Encoding.ASCII.GetString()之类的来把char[]转换成string。