将字符串转换为byte []执行操作并返回byte []

时间:2018-03-26 16:19:59

标签: java vb.net byte

我正在将旧的VB.net项目转换为Java(我几乎不知道任何VB)。

Dim asciis As Byte() = System.Text.Encoding.ASCII.GetBytes(name)
For i As Int32 = 0 To asciis.Length - 1
  asciis(i) = CByte(asciis(i) + 1)
Next
Dim encryptedName As String = StrReverse(Uri.EscapeDataString(System.Text.Encoding.ASCII.GetString(asciis, 0, asciis.Count())))

我将其转换为:

byte[] asciis = name.getBytes();
for (int i =0; i<asciis.length-1;i++){
   asciis[i] = (byte)(asciis[i]+1);
}
String encryptedName = StringUtils.reverse(asciis.toString()).substring(0,asciis.length);

我转换了name 29384,而.Net提供了594A3%3,而我的Java代码则提供了d9354

我错过了什么?

2 个答案:

答案 0 :(得分:1)

asciis.toString()不正确(它会为您提供数组的地址),您需要执行new String(asciis, StandardCharsets.UTF_8)从字节数组创建字符串。并且您需要应用URLEncoder.encode(newString, StandardCharsets.UTF_8.name())来应用在VB代码中完成的相同URI编码。此外,您需要name.getBytes(StandardCharsets.UTF_8)而不是name.getBytes(),因为否则您将使用其运行的操作系统的默认字符集,并且它可能不兼容ASCII。

答案 1 :(得分:0)

好吧,因为@Nyamiou说我必须将字符串赋予字符串并使用URLEncoder对其进行编码。

byte[] asciis = number.getBytes(Charset.forName("US-ASCII"));
for (int i =0; i<asciis.length;i++){
   asciis[i] = (byte)(asciis[i]+1);
}
String asciiString = new String(asciis, Charset.forName("US-ASCII"));
String encryptedNumber= StringUtils.reverse(URLEncoder.encode(asciiString, "US-ASCII"));