将一个以空字符结尾的字符串与一个非空终止的字符串进行比较
问题描述:
我使用System.Drawing.Imaging从图像目录中提取图像标签。我可以拉标签就好,但问题是字符串脱离PropertyItem是空终止,但我比较它的字符串不是。我的问题是,我如何比较空终止的字符串与C#中的非空终止的字符串?将一个以空字符结尾的字符串与一个非空终止的字符串进行比较
这是我跑
byte[] tagBytes = new byte[tag.Length * sizeof(char)];
System.Buffer.BlockCopy(tag.ToCharArray(), 0, tagBytes, 0, tagBytes.Length);
pnl_slider.Visible = false;
string relativePath = ConfigurationManager.AppSettings["PhotoPathRelative"];
DirectoryInfo info = new DirectoryInfo(ConfigurationManager.AppSettings["PhotoPathPhysical"]);
FileInfo[] Files = info.GetFiles("*.jpg").OrderBy(p => p.CreationTime).ToArray();
foreach (FileInfo file in Files)
{
System.Drawing.Image img = new Bitmap(file.FullName);
foreach (PropertyItem item in img.PropertyItems)
{
if (item.Id == 40094)
{
str += "'" + Encoding.Unicode.GetString(item.Value).Trim() + "' " + BitConverter.ToString(item.Value) + " == " + BitConverter.ToString(tagBytes) + "<br/>";
}
}
img.Dispose();
}
“STR”的输出看起来像这样的代码:
'wildlife' 77-00-69-00-6C-00-64-00-6C-00-69-00-66-00-65-00-00-00 == 77-00-69-00-6C-00-64-00-6C-00-69-00-66-00-65-00
'wildlife' 77-00-69-00-6C-00-64-00-6C-00-69-00-66-00-65-00-00-00 == 77-00-69-00-6C-00-64-00-6C-00-69-00-66-00-65-00
'wildlife' 77-00-69-00-6C-00-64-00-6C-00-69-00-66-00-65-00-00-00 == 77-00-69-00-6C-00-64-00-6C-00-69-00-66-00-65-00
'macro' 6D-00-61-00-63-00-72-00-6F-00-00-00 == 77-00-69-00-6C-00-64-00-6C-00-69-00-66-00-65-00
只需要调用'Encoding.Unicode.GetString(item.Value).Trim ()'在字节数组上,输出字符串应该是相同的,你在输出中看到最后的'00-00'已经被解码器去除。 – kennyzx 2014-11-25 03:33:37
@kennyzx我给了它一个尝试,没有骰子,同样的问题。 'if(Encoding.Unicode.GetString(item.Value).Trim()== Encoding.Unicode.GetString(tagBytes).Trim())' – ChrisStillwell 2014-11-25 03:42:19
看起来像你必须修剪终结者[手动](http:///stackoverflow.com/a/864274/815938),我认为这是由解码器完成的,但我错了。 – kennyzx 2014-11-25 04:07:07