当前位置: 首页 > 知识库问答 >
问题:

如何通过java代码将ASCII转换为大型机二进制?

公良鸿禧
2023-03-14
/* This routine converts UNIX character data into mainframe binary    */
/* representation.  It is called from the switch statement when       */
/* input field type is "6"                                            */

int UNIX_mf_binary( ) 
{
unsigned char* out_rec;
int out_position;
int int_work_area;
long int long_int_work_area;
int char_work_area;
char temp_area[11];     // This will be having the value of '     451841'
unsigned char* c_integer_position;
unsigned int i_integer_position;
  long_int_work_area = atol(temp_area);
  i_integer_position = &long_int_work_area;
  c_integer_position = i_integer_position;

  out_rec[out_position] = *c_integer_position; 
  c_integer_position = i_integer_position + 1;
  out_position = out_position + 1;

  out_rec[out_position] = *c_integer_position; 
  c_integer_position = i_integer_position + 2;
  out_position = out_position + 1;

  out_rec[out_position] = *c_integer_position; 
  c_integer_position = i_integer_position + 3;
  out_position = out_position + 1;

  out_rec[out_position] = *c_integer_position; 
  c_integer_position = i_integer_position + 4;
  out_position = out_position + 1;

}

我们重写这部分的java代码如下所示:

 String bin = "     451841";
 int b; 
 b = Integer.parseInt(bin.trim());
 stringBuffer.append((char) (0x000000FF & b));
 stringBuffer.append((char) (0x0000FF00 & (b)));
 stringBuffer.append((char) (0x00FF0000 & (b)));
 stringBuffer.append((char) (0xFF000000 & (b)));
 fos.write(stringBuffer.toString().getBytes());

但是对于java代码,其值如下:^@^@^@^a

我们使用的是jre版本1.5。有人能帮我理解如何在java版本1.5中重写这段C代码吗?还有一件事,尽管temp_areaze[11]的长度为11个字符,但它的最大值是6位数。

共有1个答案

司马高明
2023-03-14

屏蔽后,无法向下移动8位值:

stringBuffer.append((char) (0xFF000000 & (b)));

应该是:

stringBuffer.append((char) ((b >> 24) & 0xff));

请注意,通过先移位,我们可以省略笨重的大常数,并且总是只做8位掩蔽。

 类似资料:
  • 如何通过使用任何Java API或开放源码工具记住打包和分区的十进制格式,将具有cobol copybook作为记录布局信息的大型机二进制文件(EBCDIC)转换为ASCII文件?

  • 问题内容: 我正在编写一个go程序,将十六进制转换为int,binary和ascii。int和二进制文件工作正常,但是ascii引起了问题。如果输入的文本少于2个字符,则可以正常工作,但是如果输入的文本过多,则会导致出现格式错误的文本。我的代码如下: 输入十六进制“ 73616d706c65 ” 时的一些输出示例: 我已经做了很多搜索,并且看到了一些有关“符文”的文档,但是我不确定这是如何工作的。

  • 看看我是否曲解了这些问题,下面是它的全部内容: 一个32位字没有固有的意义,可以用许多同样有效的方式来表示。将以下内容解码为二进制表示、指令、正整数和四个字符的ASCII字符串。 0000 0010 0001 0001 0100 0000 0010 0000

  • 本文向大家介绍JavaScript转换二进制编码为ASCII码的方法,包括了JavaScript转换二进制编码为ASCII码的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript转换二进制编码为ASCII码的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的javascript程序设计有所帮助。

  • 问题内容: 我正在获取ASCII值,并且想将其转换为整数,因为我知道它是整数ASCII值。 这是5的ASCII值。我如何将其转换为整数? 问题答案:

  • 问题内容: 我有一个很大的二进制字符串“ 101101110 …”,并且正在尝试将其存储到字节数组中。最好的方法是什么? 可以说我有largeString =“ 0100111010111011011011000000001000110101” 我正在寻找的结果: [78,187,96,17,21] 01001110 10111011 01100000 00010001 10101 我试过的 但是