RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-229072

JDo's questions

Martin Hope
JDo
Asked: 2022-07-20 21:19:17 +0000 UTC

Select2 连接俄语Bootstrap JS

  • 0

我使用select2,如果从下拉列表中选择不正确,则需要用俄语写一条消息:

这是代码:

<html>
<head>
    <title>Демка выпадающего списка Select2</title>  
    <script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css" rel="stylesheet" />
    <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/i18n/ru.js"></script>
    <!-- <script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/i18n/ru.js"></script> -->
</head>
<body>
<div style="width:520px;margin:0px auto;margin-top:30px;height:500px;">
  <h2>Демка выпадающего списка Select2</h2>
  <select class="myselect" style="width:500px;">
      <option>Вася</option>
      <option>Петя</option>
      <option>Федя</option>
      <option>Николай</option>
      <option>Сережа</option>
      <option>Наташа</option>
      <option>Танька</option>
      <option>Машка</option>
  </select>
</div>
<script type="text/javascript">
      $.fn.select2.defaults.set('language', 'de');
      $.fn.select2.defaults.set('allowClear', true);
      $.fn.select2.defaults.set('width', '100%');
      $(".myselect").select2(); 
</script>

该行$.fn.select2.defaults.set('language', 'your-lang');公开了语言,但不是全部。德语,波兰语,英语,西班牙语......例如俄语,法语,不想。这条线有一个细微差别 - 给了我我需要的东西。但我认为这是一个拐杖。

在此处输入图像描述

javascript bootstrap
  • 1 个回答
  • 48 Views
Martin Hope
JDo
Asked: 2022-02-14 04:06:10 +0000 UTC

选择特定范围内的数据 ADO.NET SQLite

  • 1

我正在使用 SQLite 数据库。有必要从数据库中获取一定时间段的数据,比如 BETWEEN (MySQL) 的时间。但是有一个细微差别,在数据库中,时间由一组值存储:G.M.D.H.M.S. 不只是一行。

在此处输入图像描述

这是请求:

@$SELECT employeeId, year, month, day, hour, minute,
second FROM [employeers] WHERE date >= {startTime} AND date <= {endTime};

和代码块本身:

public List<EmployeeDto> SelectEmployeeBetweenTimeStamp(string startTime, string endTime)
    {
        var employeeDto = new List<EmployeeDto>();
        
        using (var connection = new SqliteConnection(connectionString))
        {
            using (var command = new SqliteCommand())
            {
                connection.Open();
                command.Connection = connection;

                command.CommandText = @$SELECT id, employeeId, year, month, day, hour, minute, second, employeeName, employeeLastName FROM
                                    [employeers] WHERE date >= {startTime} AND date <= {endTime};


                command.CommandType = CommandType.Text;

                var reader = command.ExecuteReader();
                while (reader.Read())
                {
                    breezeDto.Add(new EmployeeDto
                    {
                        Id = Convert.ToInt32(reader["id"]),
                        EmployeeId = Convert.ToInt32(reader["employeeId"]),
                        Year = Convert.ToInt32(reader["year"]),
                        Month = Convert.ToInt32(reader["month"]),
                        Day = Convert.ToInt32(reader["day"]),
                        Hour = Convert.ToInt32(reader["hour"]),
                        Minutes = Convert.ToInt32(reader["minute"]),
                        Seconds = Convert.ToInt32(reader["second"]),
                        EmployeeName = reader["employeeName"].ToString(),
                        EmployeeLastName = reader["employeeLastName"].ToString()
                    });
                }
            }
        }

        throw new Exception();
    }

输入参数是 DateTime.ToString() 起点和终点。

如何将数据库中的日期收集为一个整体并在查询中进行比较?

c#
  • 2 个回答
  • 10 Views
Martin Hope
JDo
Asked: 2020-03-17 13:37:56 +0000 UTC

从文本文件中提取和修改特定行

  • 0

有一个网络接口的文本文件:

auto eth0 bri0
iface eth0 inet static
    address 192.168.1.118/24
iface eth0.110 inet manual
    vlan-raw-device eth0
iface bri0 inet static
    address 192.168.110.1/24
    bridge_ports eth0.110
    bridge_stp on
    bridge_maxwait 10 ```

您需要从 eth0 获取地址并将其替换为另一个地址,例如 192.168.1.13。

我创建了一个获取所有接口和 ip 的类:

 public class IpChangeService
{
    private readonly string[] configFile;
    private List<string> interfaceName = new List<string>();
    private List<string> ipAddress = new List<string>();
    private string currentAdapter;

    public IpChangeService(string[] configFile, string currentAdapter)
    {
        this.configFile = configFile;
        this.currentAdapter = currentAdapter;
    }

    public (IList<string> iface, IList<string> ipAddress) GetCurrentInterfaces()
    {
        foreach (var line in configFile)
        {
            if (line.Contains("iface") && line.Contains("inet static"))
            {
                if (interfaceName != null)
                {
                    var str = line.Split(' ')[1] + " ";
                    var strWithoutSpaces = str.Replace(" ", "");
                    interfaceName.Add(strWithoutSpaces);
                }
            }

            if (interfaceName!=null && line.Contains("address"))
            {
                // see http://stackoverflow.com/questions/4890789/regex-for-an-ip-address
                ipAddress.Add(Regex.Match(line, @"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}").Value);
            }
        }

        return (interfaceName, ipAddress);
    }

    public int GetCurrentInterfaceIndex()
    {
        return interfaceName.IndexOf(currentAdapter);
    }

嗯,在主程序中我接收数据并尝试写下来,但是我觉得这样不正确,而且它不能正常工作(地址被歪斜插入)!而且我仍然不知道如何在没有通过索引硬编码的情况下正确选择 ip。

iface eth0 inet static
    address 192.168.1.118/24168.1.13/24

 private static void Main(string[] args)
    {
        var fileName = $"{AppDomain.CurrentDomain.BaseDirectory}interfaces";
        var inputLines = File.ReadAllLines(fileName, Encoding.Default);
        string interfaceName;
        string ipAddress;
        var ipChangeService = new IpChangeService(inputLines, "eth0");

        var currentIface = ipChangeService.GetCurrentInterfaces();
        var index = ipChangeService.GetCurrentInterfaceIndex();

        interfaceName = currentIface.iface[index];
        ipAddress = currentIface.ipAddress[0]; //FIXME: ХАРДКОД! 

        Console.WriteLine(interfaceName);

        var s2 = "192.168.1.113/24"; // ip на который заменяем строчку

        var configText = File.ReadAllText(fileName, Encoding.Default);

        configText = configText
            .Remove(configText.IndexOf(currentIface.ipAddress[0], StringComparison.Ordinal), ipAddress.Length)
            .Insert(configText.IndexOf(currentIface.ipAddress[0], StringComparison.Ordinal), s2);

        using (var file = new StreamWriter(fileName))
        {
            file.Write(configText);
        }
        Console.ReadKey();
    }

但最重要的是,目前尚不清楚如何从所有现有的(可能有几个)中准确地选择 ip 地址 eth0。然后替换这个特定的子字符串。

c#
  • 2 个回答
  • 10 Views
Martin Hope
JDo
Asked: 2020-12-06 15:16:49 +0000 UTC

运行 bash 脚本 .Net Core 2.2 C#

  • 2

您需要从用 C# .net core 2.2 编写的程序运行用 Bash 编写的脚本。

cd /home/jman/myapp/

。/测试

在 C# 程序中,我通过启动命令(帮助程序)来完成:

 public string RunBashCommand(string cmd, Dictionary<string, string> environmentVariables = null)
    {
        using (var process = new Process())
        {
            process.StartInfo = new ProcessStartInfo
            {
                FileName = "/bin/bash",
                Arguments = $"-c \"{cmd}\"",
                RedirectStandardOutput = true,
                UseShellExecute = false,
                CreateNoWindow = true
            };
            if (environmentVariables != null)
                foreach (var variable in environmentVariables)
                {
                    process.StartInfo.EnvironmentVariables[variable.Key] = variable.Value;
                }

            process.Start();
            var result = process.StandardOutput.ReadToEnd().Trim('\n').Trim('\r');
            process.WaitForExit();
            return result;
        }
    }

和调用本身:

 private void LoadDevice()
    {
        Console.WriteLine(scriptRunner.RunBashCommand("cd /home/jman/myapp/"));
        Console.WriteLine(scriptRunner.RunBashCommand("./test"));
    }

我在 Ubuntu 中运行一个用 C# 编写的应用程序:

dotnet MyCoreApp.dll

我得到一个错误:

/bin/bash:测试:找不到命令

实际上如何正确运行脚本?

c#
  • 1 个回答
  • 10 Views
Martin Hope
JDo
Asked: 2020-11-28 14:32:50 +0000 UTC

从整数中提取一定数量的位 C#

  • 3

有必要编写一个通用方法,允许您从无符号整数 (Uint32) 中提取特定的位帧,并将所选帧以不同的组合转换回整数 (Int32)。

示例(要接收的帧为粗体): Number = 4194967295 = 1111 10100000101000011110 11111111

1111 10100000101000011110 11111111

更远

111 1 10100000101000011110 11111111 - 这里一切都很简单,为了提取一个特定的位,编写了一个单独的方法,内容如下:

value & (1 << (bitNumber));

然后

1111 101000001010000111 10 11111111

1111 10100000101000011110 11111111

  • 该方法称为 GetBitFrame
  • 返回一个整数 (int)
  • 第一个参数是原始数字,一个无符号整数(uint)
  • 第二个参数是帧大小(从整数中提取的位数)
  • 好吧,参数,例如,用于左右移动的参数(简而言之,int 并不重要)。

我这样做了,但它不能正常工作:

private const uint Value = 4194967295;

private int GetBitFrame(short leftShift, short rightShift)
    {
        if (leftShift < 0 || leftShift > 31 || rightShift < 0 || rightShift > 31)
        {
            throw new ArgumentOutOfRangeException();
        }

        var buffer = (int)((Value << 1) >> leftShift); // откинул справа на leftShift
        var result = buffer << rightShift; // откинул влево на rightShift

        return result;
    }

    public int TwentyBitFrame => GetBitFrame(9, 4); // Тут должен получить 10100000101000011110 DEC = 657950
c#
  • 1 个回答
  • 10 Views
Martin Hope
JDo
Asked: 2020-09-23 21:42:01 +0000 UTC

通过系统调用 C# Mono Linux 录制

  • 0

尝试将整数值写入 Linux 系统地址

/sys/class/背光/背光/亮度

我正在使用 MonoPosix。我做错了什么,因为错误 Invalid argument [EINVAL] 弹出。也许我没有正确写入值。

我连接动态库:

    [DllImport("libc.so.6", EntryPoint = "open")]
    public static extern int Open(string fileName, int mode);

    [DllImport("libc.so.6", EntryPoint = "fcntl", SetLastError = true)]
    private static extern int Fcntl(int fd, int request, int data);

private const string Path = "/sys/class/backlight/backlight/brightness";
    private int fd = -1;

接下来,我打开文件:

private void Open()
    {
        fd = Syscall.open(Path, OpenFlags.O_RDWR);

        if (fd < 0)
        {
            CheckAndThrowUnixIOException();
        }
    }

我试着写:

 public unsafe void WriteValue(int value)
    {
        Open();

        var ret = Fcntl(fd, 1, value); // что - то тут не так

        int count;
        var data = new char[1];
        data[0] = (char) value; // и тут тоже что-то не правильно? Нужно значение в IntPtr.

        fixed(char* p = data)
        {
            count = (int)Syscall.write(fd, p, (ulong) data.Length);
        }


        if (count < 0)
        {
            CheckAndThrowUnixIOException(); // Соответственно тут летит ошибка.
        }
    }

抛出异常方法:

 private void CheckAndThrowUnixIOException()
    {
        var error = Marshal.GetLastWin32Error();
        throw new UnixIOException(error);
    }

我不知道如何将值写入 sys/class.... 也不清楚如何从 Path 常量中读取地址。

c#
  • 1 个回答
  • 10 Views
Martin Hope
JDo
Asked: 2020-08-13 16:49:46 +0000 UTC

搜索 C# 文件时忽略扩展名中的字母大小写

  • 0

搜索文件时,必须忽略文件扩展名中的大小写,因为该应用程序在 Mono 环境中的 Linux OS 上运行。如何才能做到这一点?例如:pdf、Pdf、pDf、PDF等……必须在所有目录和子目录中进行搜索。

现在我这样做:

public ICollection<FileInfo> GetFileInfo()
    {
        var directories = new DirectoryInfo(MediaPath);
        var extensions = new[] {"*.pdf", "*.doc"};
        var files = extensions.SelectMany(ext => directories.GetFiles(ext, SearchOption.AllDirectories));

        return files.ToList();
    }
c#
  • 2 个回答
  • 10 Views
Martin Hope
JDo
Asked: 2020-05-22 03:39:52 +0000 UTC

替换文本框中的字符以输入密码 C# WPF MVVM

  • 0

历史上发生过这样的情况,必须使用文本框来输入用户名和密码。如何正确组织密码文本字段中的字符替换。我草拟了代码。

public class TextToPasswordCharConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var str = new string('*', value?.ToString().Length ?? 0);
        return str;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        //throw new NotImplementedException();
        return new object();
    }
}

视图模型中的密码属性

public string PasswordField
    {
        get => passwordValue;
        set
        {
            passwordValue = value;
            OnPropertyChanged();
        }
    }

观察者

 public abstract class NotificationObject : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

    protected void SetField<T>(ref T field, T value, [CallerMemberName] string propertyName = null)
    {
        if (!EqualityComparer<T>.Default.Equals(field, value))
        {
            field = value;
            OnPropertyChanged(propertyName);
        }
    }
}

标记

    <TextBox Grid.Row="0" Grid.Column="0" TextWrapping="Wrap" Margin="140,174,30,10">
        <TextBox.Text>
            <Binding Path="PasswordField" ValidatesOnDataErrors="True" Converter="{StaticResource TextToPasswordCharConverter}" UpdateSourceTrigger="PropertyChanged">
                <Binding.ValidationRules>
                    <ExceptionValidationRule />
                </Binding.ValidationRules>
            </Binding>
        </TextBox.Text>
    </TextBox>

该代码有效,但问题是我不知道如何正确实现转换器。现在,当输入一个字符时,他在字段“ ”中一次写了 13 个字符,并且无法使用退格键删除它们。输入字符时,必须始终在文本字段中打印字符“ ”,并具有擦除它的能力。

c#
  • 1 个回答
  • 10 Views
Martin Hope
JDo
Asked: 2020-04-26 13:48:45 +0000 UTC

通过 HttpClient C# 发送 DateTimeOffset

  • 1

在将时间传输到用 WebApi 编写的服务器时遇到问题。我怀疑数据以 Json 格式被错误地序列化。我以 DateTimeOffset 格式传递数据,客户端是 WPF 中的一个简单表单。

客户端上的数据模型(在服务器上类似,只有 Id 的属性):

 public class Person
{
    public int Id { get; set }
    public string Name { get; set; }

    public string LastName { get; set; }

    public string Department { get; set; }

    public DateTimeOffset PhotoUploadDateTime { get; set; }

    public string Photo { get; set; }
}

发送方式

 private void AddUserClick(object sender, RoutedEventArgs e)
    {
        var fileModel = new Person
        {
            //Id = new Guid(),
            Name = txtName.Text,
            LastName = txtLastName.Text,
            Department = txtDepartment.Text,
            PhotoUploadDateTime = DateTimeOffset.UtcNow,
            Photo = Convert.ToBase64String(image)
        };

        var client = new WebApiSender(urlAddress);
        client.AddPerson(fileModel);

        MessageBox.Show("File has been uploaded");
    }

AddPerson HttpClient 方法:

  public async Task AddPerson(Person person)
    {
        using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri(baseAddress);
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            var response = await client.PostAsJsonAsync<Person>("api/employee/", person);
            if (!response.IsSuccessStatusCode)
            {
                throw new Exception("Error when adding file!");
            }
        }
    }

在客户端上填充数据模型

在此处输入图像描述

到达控制器并写入数据库的数据

在此处输入图像描述

结果,除了时间和日期之外,有效值会在控制器中到达服务器。

c#
  • 1 个回答
  • 10 Views
Martin Hope
JDo
Asked: 2020-04-24 18:49:47 +0000 UTC

未正确读取 XML 文件

  • 1

需要对当前 xml 文档中的数据进行反序列化。我拿了完成的 xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<root>
 <address>24</address>
 <city>New-York</city>
 <state>Alabama</state>
<firstPerson>
 <age>19</age>
 <name>Jey</name>
 <department>none</department>
</firstPerson>
 <secondPerson>
 <age>22</age>
 <name>Abraham</name>
 <department>none</department>
 </secondPerson>
</root>

并基于它生成模型

[XmlRoot(ElementName="firstPerson")]
public class FirstPerson {
    [XmlElement(ElementName="age")]
    public string Age { get; set; }
    [XmlElement(ElementName="name")]
    public string Name { get; set; }
    [XmlElement(ElementName="department")]
    public string Department { get; set; }
}

[XmlRoot(ElementName="secondPerson")]
public class SecondPerson {
    [XmlElement(ElementName="age")]
    public string Age { get; set; }
    [XmlElement(ElementName="name")]
    public string Name { get; set; }
    [XmlElement(ElementName="department")]
    public string Department { get; set; }
}

[XmlRoot(ElementName="root")]
public class Root {
    [XmlElement(ElementName="address")]
    public string Address { get; set; }
    [XmlElement(ElementName="city")]
    public string City { get; set; }
    [XmlElement(ElementName="state")]
    public string State { get; set; }
    [XmlElement(ElementName="firstPerson")]
    public FirstPerson FirstPerson { get; set; }
    [XmlElement(ElementName="secondPerson")]
    public SecondPerson SecondPerson { get; set; }
}

由于参数(年龄等)相同,所以我重新做了数据模型

 [Serializable]
[XmlRoot(ElementName="root")]
public class People
{
    public byte Address { get; set; }

    public string City { get; set; }

    public string State { get; set; }

    [XmlElement(ElementName = "firstPerson")]
    public Person FirstPerson { get; set; }

    [XmlElement(ElementName = "secondPerson")]
    public Person SecondPerson { get; set; }
}

[Serializable]
[XmlRoot(ElementName = "root")]
public class Person
{
    public byte Age { get; set; }

    public string Name { get; set; }

    public string Department { get; set; }
}

然后我读了xml:

internal class Program
{
    private const string xmlPath = "test.xml";

    private static void Main(string[] args)
    {
        var value = DeserializeSettings();

        Console.WriteLine(value.Address);
        Console.WriteLine(value.City);
        Console.WriteLine(value.State);
        Console.WriteLine(value.FirstPerson.Age);
        Console.WriteLine(value.FirstPerson.Name);
        Console.WriteLine(value.FirstPerson.Department);

        Console.ReadKey();
    }

    private static People DeserializeSettings()
    {
        try
        {
            var serializer = new XmlSerializer(typeof(People));
            var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, xmlPath);
            var reader = new StreamReader(path);
            var people = (People) serializer.Deserialize(reader);
            reader.Close();

            return people;
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
            return new People();
        }
    }
}

结果,我得到 0 或空虚(取决于数据类型), 在此处输入图像描述 我哪里出错了?

c#
  • 1 个回答
  • 10 Views
Martin Hope
JDo
Asked: 2020-03-05 19:15:00 +0000 UTC

输出总曲目时间 NAudio C#

  • 1

有必要显示曲目的时间。事实证明,如果只有 mp3。但播放列表中可能还有其他格式,例如 WAV 和 Vorbis。如何实现类型之间的自动切换以显示两种类型文件中的任何一种的时间。现在我这样做了:

private static void Main(string[] args)
    {
        try
        {
            foreach (var file in GetFileInfo())
            {
                Mp3FileReader reader = new Mp3FileReader(file.FullName);
                WaveFileReader s; //??

                TimeSpan duration = reader.TotalTime;
                Console.WriteLine(duration);
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
        }

        Console.ReadKey();
    }

    public static IList<FileInfo> GetFileInfo()
    {
        DirectoryInfo directories = new DirectoryInfo("D:\\TestAudio");
        var extensions = new string[] { "*.mp3", "*.mp4", "*.wav", "*.wma", "*.ogg", "*.spx" };
        var files = extensions.SelectMany(ext => directories.GetFiles(ext, SearchOption.AllDirectories));

        return files.ToList();
    }

当涉及到 WAV 文件时,它会相应地引发异常。

在此处输入图像描述

c#
  • 1 个回答
  • 10 Views
Martin Hope
JDo
Asked: 2020-02-18 15:24:10 +0000 UTC

如何在 C# .NET 方法中切换状态

  • 1

实现一个简单的外观来隐藏较低级别的解决方案。有一个数据模型:

public class OutControl
{
    //---------Первая группа---------//

    public const byte Call = 0x00;
    public const byte Nop = 0x01;
    public const byte Alarm = 0x02;
    public const byte Warning = 0x03;
    public const byte Nol = 0x04;
    public const byte Action = 0x05;
    public const byte Pull = 0x06;

    //---------Вторая группа---------//

    public const byte Push = 0x00;
    public const byte Buzzer = 0x01;
    public const byte Temp = 0x02;
    public const byte Ring = 0x03;
    public const byte SwitchOff = 0x04;
    public const byte SwitchOn = 0x05;
    public const byte Reverse = 0x06;
    public const byte Reserve = 0x07;

    //-------Опкоды для записи в определенный блок------//

    public const byte FirstBlock = 0x06; 
    public const byte SecondBlock = 0x07;
}

问题是每个变量都属于一个特定的块。第一组(7 个变量)到 FirstBlock,第二组到 SecondBlock,操作码相同。我不明白你怎么能在块之间自动切换,这样以后,在 main 中,只需调用该方法:

static void Main(string[] args)
{
    Facade facade = new Facade();

    facade.SetData(Model.OutControl.Buzzer, true);
}

绕过块的安装。只向方法传递一个带有操作码的常量,以及一个用于设置标志的布尔变量:

public class Facade
{
    private Model.OutControl _outs;

    public Facade()
    {
        _outs = new Model.OutControl();
    }

    public void SetData(byte outs, bool action)
    {
        switch (как можно переключать?)
        {
            case ?:
                _outs.Set(Model.OutControl.FirstBlock, outs, action);
                break;

            case ?:
               _outs.Set(Model.OutControl.SecondBlock, outs, action);
                break;
        }
    }
}

作为一个直截了当的解决方案,迭代 if() 中的每个块,但在我看来,它可以更优雅地完成。例如,用多态替换?

c#
  • 3 个回答
  • 10 Views
Martin Hope
JDo
Asked: 2020-01-19 14:53:22 +0000 UTC

如何计算 CRC16 Modbus RTU C#

  • 0

我遇到了一个问题,我举了一个例子来计算 C# 中的 CRC16 Modbus从这里 我编译了代码,创建了一个单元测试:

    [Test]
    public void Crc16AnciCalculateTest()
    {
        Assert.AreEqual(new byte[] { 0x37, 0x4B }, Crc16AnciUtility.ComputeChecksumBytes(new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }));
    }

而且他没有通过。我检查了几个在线计算器,例如,这个

我在计算器中输入 123456789 并选择输入 ASCI:Modbus 的结果是 0x4B37。就我而言:

byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 } 

退货 - B20E

我认为那是错误的例子。我拿了 nuget Tako.CRC,画了一个控制台应用程序:

static void Main(string[] args)
    {
        byte[] bytes = {1, 2, 3, 4, 5, 6, 7, 8, 9};

        CRCManager crcManager = new CRCManager() {DataFormat = EnumOriginalDataFormat.HEX};
        var provider = crcManager.CreateCRCProvider(EnumCRCProvider.CRC16Modbus);

        var status = provider.GetCRC(bytes);
        Console.Write("Input: ");
        foreach (var b in bytes)
        {
            Console.Write(b + " ");
        }
        Console.WriteLine();
        Console.WriteLine($"Output: {status.CrcHexadecimal}");

        Console.ReadLine();
    }

结果是一样的...

在此处输入图像描述

我不明白为什么该值与在线计算器不匹配?也许我没有正确输入数据?但是我尝试了即使输入一个数字或一行,结果仍然不收敛。相信谁?我会很高兴得到澄清和帮助,在此先感谢!

c#
  • 1 个回答
  • 10 Views
Martin Hope
JDo
Asked: 2020-12-28 15:24:55 +0000 UTC

序列化 XML 文档

  • 0

您需要将文档序列化为测试。该文件已准备好,从中生成类。为什么工作室将每个标签创建为一个类以及如何正确序列化它们?虽然运行时出错。

<?xml version="1.0" encoding="utf-8" ?>
<AapSelector xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Sections>
   <Section>
     <Type>FAP</Type>
   </Section>
 </Sections>
</AapSelector>

班级:

[Serializable]
public partial class AapSelector
{
    public AapSelectorSections Sections { get; set; }
}

[Serializable]
public partial class AapSelectorSections
{
   public AapSelectorSectionsSection Section { get; set; }
}

[Serializable]
public partial class AapSelectorSectionsSection
{

     public string Type { get; set; }
}

class Program
{

static void Main(string[] args)
{
    var A = new AapSelector();

    var serializer = new XmlSerializer(A.GetType());

    serializer.Serialize(Console.Out, serializer);
    Console.WriteLine();

    Console.ReadLine();
}

}

在此处输入图像描述

c#
  • 2 个回答
  • 10 Views
Martin Hope
JDo
Asked: 2020-11-14 16:12:58 +0000 UTC

错误 System.EntryPointNotFoundException: Mono_Posix_Stdlib_free C# Mono

  • 0

我正在尝试在 Raspberry Pi 上使用 i2c 总线。找到要使用的包装器。错误 System.EntryPointNotFoundException: Mono_Posix_Stdlib_free C# Mono。通过链接i2c 包装器的包装器

  using Mono.Unix.Native;
  using Mono.Unix;

  [DllImport("libc.so.6", EntryPoint = "ioctl", SetLastError = true)]
    extern private static int ioctl(int fd, int request, byte x);

  byte[] bytes;
        using (var i2cBus = new I2CBus(bus))
        {
            var i2cDevice = new I2CDevice(i2cBus, 0x22);

            log.Debug($"{i2cDevice.ToString()} Device");

            System.Console.WriteLine($"{i2cDevice.Address} address");
            log.Debug($"{i2cDevice.Address} address");
            System.Console.WriteLine($"{i2cDevice.ReadByte(0x00)} Data");
            log.Debug($"{i2cDevice.ReadByte(0x00)} Data");

        }

只要调用 ReadByte(或库中的任何其他方法),就会发生此错误。这是从库中读取字节的方法

 public unsafe byte ReadBytes(byte devAddr, byte regAddr, byte length, byte[] data, int offset=0, ushort timeout = 0)
    {
        if (length > 127)
            throw new IOException(_device + ": length > 127");

        //TODO: break this up so that we can await on all 3  native calls
        ChangeDevice(devAddr);

        //fixed(byte* p = &regAddr)
        {
            int ret = (int)Syscall.write(_fd, &regAddr, 1);
            if (ret != 1)
            {
                CheckAndThrowUnixIOException();
            }
        }

        int count;
        fixed (byte* p = &data[offset])
        {
            count = (int)Syscall.read(_fd, p, (ulong)length);
            if (count < 0)
            {
                CheckAndThrowUnixIOException();
            }
            else if (count != length)
            {
                throw new IOException(_device + ": read short: length = " + length + " > " + count);
            }
        }

        return (byte)count;
    }

在此处输入图像描述

我试图复制在构建期间创建的库(Mono.Posix.dll)并将其替换到 /usr/lib/mono/4.0-api 文件夹中/它没有帮助。接下来看哪里?

c#
  • 1 个回答
  • 10 Views
Martin Hope
JDo
Asked: 2020-10-18 21:42:21 +0000 UTC

从 COM 端口 C# .Net 读取数据

  • 0

我在单片机上写了一个程序,通过sprintf函数向端口发送数据(4个int类型的常量值),sprintf将int数转换为字符串。该字符串由 usart 发送的 ascii 字符的字节组成。

printf("+------- Pakage sending --------+");
sprintf(altitude,"alt: %d", ALT);

/* Send data to USART; */
timerDelayMs(300);
send_Uart_str(altitude);
send_Uart(NEW_LINE);
/* и тд. */

我打开终端并得到以下图片:

在此处输入图像描述

NEW_LINE 是 ASCII = 13 中的插入符号;

在 PC 端,我需要将每一行写入单独的缓冲区或变量。在这里我无法理解如何按马车划分。绘制了一个原始控制台应用程序。虽然我正在按事件从端口读取所有内容,但是在控制台中渲染时,同样的问题:

在此处输入图像描述

虽然在监视器中调试时,数据正常,没有损坏。实际的端口类:

 public class CustomSerialPort : SerialPort
{

    public event DataRecievedEventHandler DataChanged;
    public delegate void DataRecievedEventHandler(object sender, string package);

    public CustomSerialPort(string port)
        : base()
    {
        //base.PortName = COM1;
        base.BaudRate = 38400;
        base.DataBits = 8;
        base.StopBits = StopBits.One;
        base.Parity = Parity.None;
        base.ReadTimeout = 300;

        base.DataReceived += CustomSerialPort_DataReceived; ;
    }

    public void Open(string portName)
    {
        if (base.IsOpen)
        {
            base.Close();
        }
        base.PortName = portName;
        base.Open();
    }

    private void CustomSerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        var port = (SerialPort) sender;
        try
        {
            DataChanged?.Invoke(sender, port.ReadExisting());
        }
        catch (Exception exception)
        {
            Debug.WriteLine(exception);
        }
    }
}

主程序:

 class Program
   {
    static void Main(string[] args)
    {
        var port = new CustomSerialPort("COM3");
        port.Open("COM3");

        port.DataChanged += Port_DataChanged;

        Console.ReadKey();
    }

    private static void Port_DataChanged(object sender, string package)
    {
        Console.WriteLine(package);
    }
}

可能是什么问题呢?

c#
  • 2 个回答
  • 10 Views
Martin Hope
JDo
Asked: 2020-10-18 15:15:31 +0000 UTC

在 C# .NET 控制台应用程序中使用 Autofac

  • 1

决定在实践中感受 Autofac。但是没有足够的知识来使用它。该项目很简单,基于使用串行端口。创建了一个模型

public class SerialPortSettings 
{ 
    public string Port { get; set; }
    public int BaudRate { get; set; }
    public int DataBits { get; set; }
    public Parity Parity { get; set; }
    public StopBits StopBits { get; set; }
    public string ThreadControl { get; set; }
    public int ReadTimeOut { get; set; }

    public SerialPortSettings()
    {
      // Инициализация свойств и присвоение настроек порта  
    }
}

界面

public interface ISerialPortService
{
    void SetPort();
    void WriteData(string msg);
    bool OpenPort();
    bool ClosePort();
}

实施(我不会包括整个班级以节省空间)

public class SerialPortService : ISerialPortService, IDisposable
{
    private SerialPortSettings _portSettings;
    private SerialPort _comPort;

    public TransmissionType CurrentTransmissionType { get; set; }
    public string RecievedText { get; set; }
    public string PortStatus { get; set; }

    public event DataRecievedEventHandler DataChanged;
    public delegate void DataRecievedEventHandler(object sender, string package);

    public SerialPortService()
    {
        _portSettings = new SerialPortSettings();
        _comPort = new SerialPort();
        _comPort.DataReceived += comPort_DataReceived;
    }

好吧,在缅因州,我只使用 SerialPortService 对象

class Program
{
    static SerialPortService portService = new SerialPortService();

    static void Main(string[] args)
    {
        portService.OpenPort();
        Console.WriteLine(portService.PortStatus);
        Console.WriteLine(portService.RecievedText);
        Console.ReadKey();

        portService.ClosePort();
    }

我创建了一个单独的类来设置 Autogac,在这里我不明白如何正确设置整个事情(或者我可能已经做对了所有事情)。

public class AutofacSetup
{
    public static void ConfigureContainer()
    {
        var builder = new ContainerBuilder();

        builder.RegisterType<SerialPortService>()
            .As<ISerialPortService>();
        builder.Build();
    }
}

下一步该怎么做?

c#
  • 2 个回答
  • 10 Views
Martin Hope
JDo
Asked: 2020-09-26 20:59:25 +0000 UTC

循环单链表 C#

  • 0

有必要实施一个循环清单。通过扩展方法制作。但有一个警告。如何实现从节点中第一个值的方法返回?在这种情况下,第二个值(“Tanya”)总是在第一次传递期间返回给我,然后在最后一个节点之后,转换到第一个值。

 class Program
{
    static void Main(string[] args)
    {
        // Создадим связный список
        LinkedList<string> linkedList = new LinkedList<string>();

        // Добавим несколько элементов
        linkedList.AddFirst("Вася");
        linkedList.AddFirst("Петя");
        linkedList.AddFirst("Таня");
        linkedList.AddFirst("Коля");

        // Отобразим элементы в прямом направлении
        LinkedListNode<string> node;



        Console.WriteLine("Элементы коллекции в прямом направлении: ");

        for (node = linkedList.First; node != null; node = node.Next)
            Console.Write(node.Value + "\t");

        Console.WriteLine();

        var result = GetValue(linkedList.First);

        Console.WriteLine($"+++++++ {result} ++++++++");

        Console.ReadKey();
    }

    private static string GetValue(LinkedListNode<string> node) 
    {
        node = CircularLinkedList.NextOrFirst(node);
        return node.Value;
    }
}

单链表的扩展方法:

 public static class CircularLinkedList
{
    public static LinkedListNode<T> NextOrFirst<T>(this LinkedListNode<T> current)
    {
        return current.Next ?? current.List.First;
    }

    public static LinkedListNode<T> PreviousOrLast<T>(this LinkedListNode<T> current)
    {
        return current.Previous ?? current.List.Last;
    }
}

在此处输入图像描述

c#
  • 2 个回答
  • 10 Views
Martin Hope
JDo
Asked: 2020-09-21 20:06:42 +0000 UTC

如果条件不满足,则从方法返回值 C#

  • 0

如何在某种情况下正确行动,方法中有许多条件,如果满足,则返回字典中的值。如果没有一个条件通过条件怎么办?类 - 数据模型:

public class SecondModel
{
    public Dictionary<int, double> FirstDepartment { get; set; }
    public Dictionary<int, double> SecondDepartment { get; set; }
    public Dictionary<int, double> ThirdtDepartment { get; set; }
}

提供者

public class SecondManager
{
    private SecondModel _model;

    public enum Department
    {
        First,
        Second,
        Third
    };

    /// <summary>
    /// Конструктор по умолчанию
    /// </summary>
    public SecondManager()
    {

        _model = new SecondModel()
        {
            FirstDepartment = new Dictionary<int, double>(),
            SecondDepartment = new Dictionary<int, double>(),
            ThirdtDepartment = new Dictionary<int, double>()
        };

        _model.FirstDepartment.Add(1, 30.2);
        _model.FirstDepartment.Add(2, 25.8);
        _model.SecondDepartment.Add(3, 45.67);
        _model.SecondDepartment.Add(4, 54.46);
    }

    double GetValuesByKey(Department department, int key)
    {
        if (department == Department.First && _model.FirstDepartment.ContainsKey(key))
            return _model.FirstDepartment[key];

        if (department == Department.Second && _model.SecondDepartment.ContainsKey(key))
            return _model.FirstDepartment[key];

        if (department == Department.Third && _model.ThirdtDepartment.ContainsKey(key))
            return _model.ThirdtDepartment[key];

        // Еcли ключа или направления не существует
        return ???;
    }

}

可以返回无穷大吗?

c#
  • 2 个回答
  • 10 Views
Martin Hope
JDo
Asked: 2020-09-20 22:42:35 +0000 UTC

访问 C# 模型中所有字典的值

  • 1

我想尝试达到包装在数据模型中的字典的值,但最终我得到的不是我需要的。需要使用 GetAll() 方法一次从所有字典中获取数据;数据模型:

public class Model
{
    public Dictionary<int, string> FirstDepartment { get; set; }
    public Dictionary<int, string> SecondDepartment { get; set; }
    public Dictionary<int, string> ThirdtDepartment { get; set; }
}

管理器或存储库

public class Manager
{
    private Model _model;
    private List<Model> _lst;

    public Manager()
    {
        _lst = new List<Model>();

        _model = new Model()
        {
            FirstDepartment = new Dictionary<int, string>(),
            SecondDepartment = new Dictionary<int, string>(),
            ThirdtDepartment = new Dictionary<int, string>()
        };

        _model.FirstDepartment.Add(1, "Вася");
        _model.FirstDepartment.Add(2, "Петя");
        _model.SecondDepartment.Add(3, "Катя");
        _model.SecondDepartment.Add(4, "Иван");
        _lst.Add(_model);
    }

    public List<Model> GetAll() => _lst;

}

主要的:

static void Main(string[] args)
{
    Console.WriteLine("=======================================");

    Manager mg = new Manager();

    foreach (var item in mg.GetAll())
    {
        Console.WriteLine($"++++ {item} ++++");
    }

    Console.WriteLine();

    Console.ReadKey();
}

我得到以下信息:

在此处输入图像描述

怎样才能正确打包,然后遍历整个模型的所有值(所有字典的Values)。

c#
  • 1 个回答
  • 10 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5