在 Java 中反向转换 ascii 为整数十进制
Convert in reverse ascii to whole decimal in Java
大家好,感谢您的提前帮助。
我已经在网上进行了搜索,但对于我最初的问题并没有真正找到任何具体的东西。
我在 JAVA 中开发了一个程序,其主要目的是读取 .DAT 文件并从中提取某些值,然后根据提取的值计算输出,然后将输出写回文件。
该文件由长度和格式都相同的记录组成,因此访问起来应该相当简单,目前我正在使用循环和 if 语句来查找第一次出现的记录和然后通过用户输入确定每条记录的长度,然后循环遍历每条记录。
然而!该文件的第一条记录是空白的(或者我是这么认为的)。事实证明,第一条记录是文件其余部分的关键,因为前几个字符是 ascii,分别引用记录长度和文件中包含的记录数。
下面是在文件中找到的 ascii 值本身的列表(忽略其中包含 ascii 的“”)
"#¼ ä "
"#g â "
“ÇG@”
"lj‰"
"ÇòÈ"
"=¼ "
我的一个朋友,多年前用 Basic 编写代码,前 3 个字符指的是记录长度,后面的 9 个字符指的是记录数。
基本上我需要做的是将这个初始的 ascii 字符字符串转换为两位小数,以便计算出每条记录的长度和记录数。
如有任何帮助,我们将不胜感激。
编辑...
请在下面找到过去用于访问该文件的基本代码,也许这会有所帮助?
CLS
INPUT "Survey System Data File? : ", survey$
survey$ = "f:\apps\survey\" + survey$
reclen = 3004
OPEN survey$ + ".dat" FOR RANDOM AS 1 LEN = reclen
FIELD #1, 3 AS RL$, 9 AS n$
GET #1, 1
RL = CVI(RL$): n = CVI(n$)
PRINT "Record Length = "; RL
reclen = RL
PRINT "Number of Records = "; n
CLOSE #1
基本上我要找的是类似的东西,但在 java.
ASCII 是一种将字节中的位模式转换为字符的特殊方式,它为每个字符赋予一个数值;字母 'A' 是这个 65.
在 Java 中,您可以通过将 char 转换为 int 来获取该数值(好的,这会为您提供 Unicode 值,但对于 ASCII 字符,Unicode 值与 ASCII 相同, 这个没关系).
但现在你需要知道长度是如何计算的:你必须添加值吗?或者将它们相乘?或者附加它们?或者将它们与 128^p 相乘,其中 p 是位置,然后将结果相加?并且,在后一种情况下,第一个字节是位置 0 还是位置 3?
记录数当然一样。
数据的另一种可能解释是字节是 BCD 编码的数字。在这种情况下,每个半字节(4 位组)代表一个从 0 到 9 的数字。在这种情况下,您必须进行一些位操作来提取数字并将它们连接起来,从左(最高)到右(最低)。至少你不必为这里的顺序和进一步解释而苦恼……
但由于 BCD 需要 8 位,如果文件确实包含 ASCII,这将不是正确的解释,因为 ASCII 是 7 位。
大家好,感谢您的提前帮助。
我已经在网上进行了搜索,但对于我最初的问题并没有真正找到任何具体的东西。
我在 JAVA 中开发了一个程序,其主要目的是读取 .DAT 文件并从中提取某些值,然后根据提取的值计算输出,然后将输出写回文件。
该文件由长度和格式都相同的记录组成,因此访问起来应该相当简单,目前我正在使用循环和 if 语句来查找第一次出现的记录和然后通过用户输入确定每条记录的长度,然后循环遍历每条记录。
然而!该文件的第一条记录是空白的(或者我是这么认为的)。事实证明,第一条记录是文件其余部分的关键,因为前几个字符是 ascii,分别引用记录长度和文件中包含的记录数。
下面是在文件中找到的 ascii 值本身的列表(忽略其中包含 ascii 的“”)
"#¼ ä "
"#g â "
“ÇG@”
"lj‰"
"ÇòÈ"
"=¼ "
我的一个朋友,多年前用 Basic 编写代码,前 3 个字符指的是记录长度,后面的 9 个字符指的是记录数。
基本上我需要做的是将这个初始的 ascii 字符字符串转换为两位小数,以便计算出每条记录的长度和记录数。
如有任何帮助,我们将不胜感激。
编辑...
请在下面找到过去用于访问该文件的基本代码,也许这会有所帮助?
CLS
INPUT "Survey System Data File? : ", survey$
survey$ = "f:\apps\survey\" + survey$
reclen = 3004
OPEN survey$ + ".dat" FOR RANDOM AS 1 LEN = reclen
FIELD #1, 3 AS RL$, 9 AS n$
GET #1, 1
RL = CVI(RL$): n = CVI(n$)
PRINT "Record Length = "; RL
reclen = RL
PRINT "Number of Records = "; n
CLOSE #1
基本上我要找的是类似的东西,但在 java.
ASCII 是一种将字节中的位模式转换为字符的特殊方式,它为每个字符赋予一个数值;字母 'A' 是这个 65.
在 Java 中,您可以通过将 char 转换为 int 来获取该数值(好的,这会为您提供 Unicode 值,但对于 ASCII 字符,Unicode 值与 ASCII 相同, 这个没关系).
但现在你需要知道长度是如何计算的:你必须添加值吗?或者将它们相乘?或者附加它们?或者将它们与 128^p 相乘,其中 p 是位置,然后将结果相加?并且,在后一种情况下,第一个字节是位置 0 还是位置 3?
记录数当然一样。
数据的另一种可能解释是字节是 BCD 编码的数字。在这种情况下,每个半字节(4 位组)代表一个从 0 到 9 的数字。在这种情况下,您必须进行一些位操作来提取数字并将它们连接起来,从左(最高)到右(最低)。至少你不必为这里的顺序和进一步解释而苦恼……
但由于 BCD 需要 8 位,如果文件确实包含 ASCII,这将不是正确的解释,因为 ASCII 是 7 位。