为什么我的ASCII字符转换为int转换失败?

时间:2013-09-11 18:51:57

标签: c# barcode checksum code128 check-digit

根据这里的图表:

http://www.idautomation.com/barcode-faq/code-128/

这个角色:

Ë

等于值103。

然而这段代码:

string barcode = textBoxRawCode128.Text.Trim(); 
. . .
int runningTotal = ConvertToASCIIInt(barCode[0]);
. . .

private int ConvertToASCIIInt(char valToConvertToASCII)
{
    const int ASCII_ADJUSTMENT_VAL = 32;
    return valToConvertToASCII - ASCII_ADJUSTMENT_VAL;
}

...当文本框中的值和条形码中的值为“Ë尝试另一个字符串。”,因此条形码[0]为“Ë”时,返回值171而不是103 ... ??? < / p>

根据这个图表:http://www.adams1.com/128table.html,对应于103的值是‡,但是当我将barCode设置为“‡尝试另一个字符串。”时,返回的值是8193 ...... ??? Curiouser和curiouser ......

注意:相关/初步帖子为Is this code for calculating Code128 barcode check digits correct?

2 个答案:

答案 0 :(得分:4)

实际上,您展示的角色的值为Ë = 203。小g是具有ascii值103的字符。

因此203 - 32 = 171

Reference

答案 1 :(得分:1)

请记住,为了找到Code 128符号的正确数字,你必须减去32,因此要获得Code 128符号103的ASCII值,你必须添加32,给你135这不是7位ASCII。亚当斯是正确的,但由于它是“高ASCII”,你会陷入混乱的代码页。因此,根据PC的语言,如果触摸字符串的应用程序使用DBCS或Unicode或8位ASCII,您可能会发现不同的字符,因为国际标准不同。如果您在Windows角色地图应用程序中调出小字体类型,则可以找到Russ Adams给出的字符。查看“0x87”下的字符,即十进制的135。

IDAutomation人正在使用他们自己的算法根据你喂它的字母到达条形码字符,所以如果他们说他们需要'Ë'来获得103,那就是他们需要的。 “Ë”并不等同于103,它只是让他们的软件咳出103.这就是解决从数字7位标准到供应商生产棒的方法的问题。

可悲的是,不同的符号系统不使用相同的算法来编码数据或导出校验和,因此每个条形码类型都必须有自己的软件。