【发布时间】:2026-02-06 10:05:01
【问题描述】:
DateTime todayDateTime = DateTime.Now;
StringBuilder todayDateTimeSB = new StringBuilder("0");
todayDateTimeSB.Append(todayDateTime.ToString("MMddyyyy"));
long todayDateTimeLongValue = Convert.ToInt64(todayDateTimeSB.ToString());
// convert to byte array packed decimal
byte[] packedDecValue = ToComp3UsingStrings(todayDateTimeLongValue);
// append each byte to the string builder
foreach (byte b in packedDecValue)
{
sb.Append(b); // bytes 56-60
}
sb.Append(' ', 37);
上面的代码获取当前日期时间,将其格式化为一个长值并将其传递给将其转换为压缩十进制格式的方法。我知道上述方法有效,因为当我单步执行代码时,字节数组对我期望的所有字节都有正确的十六进制值。
但是上面是我遇到问题的代码,特别是我研究并发现字符串生成器.Append(byte) 实际上为那个字节做了一个ToString()。当它将字节添加到字符串时,它会改变字节的值。问题是我如何告诉StringBuilder 按原样获取“字节”并将其存储在内存中而不格式化/更改值。我知道还有一个.AppendFormat() 有几个重载,它们使用IFormatProvider 提供很多关于如何格式化事物的选项,但我看不到任何方法告诉它不要格式化/更改/更改数据的价值。
【问题讨论】:
-
The question is how do I tell the StringBuilder to take the 'byte' as is and store it in memory without formatting/altering the value.好吧,你真的不能,因为 StringBuilder 代表一个可变的字符序列,但 一个字节不是一个字符。如果您知道编码(可能是 ASCII),则可以将字节转换为字符。
标签: c# stringbuilder iformatprovider