【问题标题】:Convert Extended character to int in csharp在 csharp 中将扩展字符转换为 int
【发布时间】:2016-02-25 16:21:42
【问题描述】:

我不得不将加密、解密函数从 VB6 复制到 csharp。我遇到了扩展 ascii 字符的问题。例如,所讨论的字符的扩展 ASCII 值为 155(看起来像 '>' 的较小版本)。

我从 Google 搜索中了解到有许多扩展的 ascii 版本(页面?),但我只需要此处显示的标准 Latin-1 http://www.ascii-code.com/

但我找不到明确的方法来做我需要的事情。我需要的是一种从角色中获取值 155(以及扩展集中的任何其他值)的方法。 VB6 用一个简单的 Asc(String) 语句来做到这一点。我只需要一种方法来在 csharp 中模拟此语句。

【问题讨论】:

  • 从字符串中取出 char 并将其转换为 int。
  • 很遗憾,它给出的值是 8250 - 而不是 155。这是 unicode 字符的值(2 个字节不是 1)
  • 抱歉将其转换为字节
  • 然后你会得到第一个字节,大概是 64 (我记不太清了)。请参阅下面的答案以获取解决方案。感谢您的回复。

标签: c# vb6 extended-ascii


【解决方案1】:

你可以这样做:

string str = "›";
var encoding = System.Text.Encoding.Default;
var values = encoding.GetBytes(str); //Result is { 155 }

这里的技巧是获取Windows-1252代码页的编码对象,然后使用GetBytes将字符串转换为字节数组。

【讨论】:

  • 谢谢!实际上,在我查看您的答案之前,我只是想通了。诀窍是谷歌'csharp get char from extended ascii'而不是相反。无论如何,再次感谢您!
  • 实际上 VB6 使用“ANSI”代码页 - 即运行代码的计算机上控制面板上的非 Unicode 程序设置。这不会是每台计算机上的 1252。所以从 VB6 到 C# 的严格转换将使用 System.Text.Encoding.Default 而不是 GetEncoding(1252)
  • MarkJ 你是个读心者!我在 Encoding 命名空间上看到了 Default 属性,想知道是否应该改用它。我来这里只是为了检查我的问题并看到您的评论。我将不得不再次运行所有测试,但这比重新审视这个问题要好。谢谢!
  • 50,000 个随机生成的不同长度的字符串在 VB6 和 C# 中都使用 Encoding.Default 加密相同!谢谢大家。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-30
  • 1970-01-01
  • 2018-12-01
  • 2012-11-18
  • 1970-01-01
  • 1970-01-01
  • 2013-03-19
相关资源
最近更新 更多