【问题标题】:Convert a Hex String to comma separated Hex String c#将十六进制字符串转换为逗号分隔的十六进制字符串 c#
【发布时间】:2015-02-18 13:55:00
【问题描述】:

我想在文本框中输入一系列十六进制数字,当用户点击按钮时,用逗号分隔每个字节。 AAFFBCEE 变为 AA,FF,BC,EE(最后一个字节没有逗号)。如何将字符串值转换为这种格式?

【问题讨论】:

  • 请用google搜索mac地址和hex格式。 SO 充满了问题,当然也有十六进制格式的答案。
  • 要将字符串拆分为固定大小的块,请参阅this。要添加逗号并生成新字符串,请使用 String.Join(",", stringChunks.ToArray())

标签: c# csv hex windows-forms-designer


【解决方案1】:
    string temp = "aaff4455";
    string temp2 = "";
    int size = temp.Length;

    for (int i = 0; i < size; i += 2)
    {
        temp2 += temp.Substring(i, 2);
        if ((i+2) < size)
            temp2 += ",";
    }

【讨论】:

  • 在循环中使用字符串连接通常是不好的形式。只要输入字符串很短,这可能没问题。但除此之外,您应该改用 StringBuilder.Append(string, int, int) 重载。
  • 我们谈论的是文本框而不是流...谢谢-1
  • 不客气。 TextBox 可以很容易地包含足够的文本,从而在此处使用错误的实现成为问题。无论如何,做正确并不比做错更难,那么当你可以提供一个很好的例子时,为什么还要添加一个如何构建字符串的坏例子呢?如果您不想投反对票,请写一个好的答案。这很容易;我已经告诉过你怎么做。您所要做的就是编辑您给出的答案。
  • 对不起老师...好答案取决于你的想法,伙计。我认为在这种情况下,更快的代码比浪费时间的“博学”代码更好
  • 为什么这个解决方案不好?文本框中可能有很多数据,对不起,我知道编程,试图自学
【解决方案2】:

为什么不使用 1-liner?

var str = "AABBCCDD";
var result = "";

str.ToCharArray()
      .Select((c, i) => new { i, c })
      .ToList()
      .ForEach(c => result += (c.i > 0 && c.i % 2 == 0) ? "," + c.c : c.c.ToString());

(我还在学习 Linq,所以请多多关照!)

【讨论】:

  • 这是一个非常好的解决方案!
  • 哇,一个软弱的人?我知道这并不完美,但否决票似乎很苛刻:S
  • 今天有很多反对者,哈哈,这个解决方案有点超出我的编程知识
  • @LPs 谢谢 =D 现在我要去洗碗了——现在我用 Linq 来做所有事情
猜你喜欢
  • 2018-01-31
  • 1970-01-01
  • 2018-01-22
  • 2019-07-27
  • 2017-08-12
  • 2020-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多