HarmonyOS鸿蒙Next中有关char的内容
HarmonyOS鸿蒙Next中有关char的内容
以前一直用Android java写,涉及到rc4处理,现在转一部分代码碰到问题了。
比如下面这个是java的,iY是int类型0,然后转化char类型赋值给iCY就是’\u0000’了
char iCY = (char) iY;
那么这段代码ets怎么写呢?
下面是rc4的java全段代码
public static String HloveyRC4(String aInput, String aKey) {
int[] iS = new int[256];
byte[] iK = new byte[256];
for (int i = 0; i < 256; i++)
iS[i] = i;
int j = 1;
for (short i = 0; i < 256; i++) {
iK[i] = (byte) aKey.charAt((i % aKey.length()));
}
j = 0;
for (int i = 0; i < 255; i++) {
j = (j + iS[i] + iK[i]) % 256;
int temp = iS[i];
iS[i] = iS[j];
iS[j] = temp;
}
int i = 0;
j = 0;
char[] iInputChar = aInput.toCharArray();
char[] iOutputChar = new char[iInputChar.length];
for (int x = 0; x < iInputChar.length; x++) {
i = (i + 1) % 256;
j = (j + iS[i]) % 256;
int temp = iS[i];
iS[i] = iS[j];
iS[j] = temp;
int t = (iS[i] + (iS[j] % 256)) % 256;
int iY = iS[t];
char iCY = (char) iY;
iOutputChar[x] = (char) (iInputChar[x] ^ iCY);
}
return new String(iOutputChar);
}
更多关于HarmonyOS鸿蒙Next中有关char的内容的实战教程也可以访问 https://www.itying.com/category-93-b0.html
有示例吗?入参是什么,函数返回什么。试着改了一下,不确定行不行。
function hloveyRC4(aInput: string, aKey: string): string {
const iS: number[] = new Array<number>(256).fill(0);
const iK: number[] = new Array<number>(256);
for (let i = 0; i < 256; i++) {
iS[i] = i;
}
let j = 1;
for (let i = 0; i < 256; i++) {
iK[i] = aKey.charCodeAt(i % aKey.length);
}
j = 0;
for (let i = 0; i < 255; i++) {
j = (j + iS[i] + iK[i]) % 256;
const temp = iS[i];
iS[i] = iS[j];
iS[j] = temp;
}
let i = 0;
j = 0;
const iInputCharCodeArray: number[] = Array.from(aInput, char => char.charCodeAt(0));
const iOutputCharCodeArray: number[] = new Array<number>(iInputCharCodeArray.length);
for (let x = 0; x < iInputCharCodeArray.length; x++) {
i = (i + 1) % 256;
j = (j + iS[i]) % 256;
const temp = iS[i];
iS[i] = iS[j];
iS[j] = temp;
const t = (iS[i] + (iS[j] % 256)) % 256;
const iY = iS[t];
const iCY = iY as unknown as number;
iOutputCharCodeArray[x] = iInputCharCodeArray[x] ^ iCY;
}
return String.fromCharCode(...iOutputCharCodeArray);
}
更多关于HarmonyOS鸿蒙Next中有关char的内容的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
非常感谢您的回答!
我这边在hexString 转换 Bytes碰到了问题
比如这是java版的方法
```java
/**
* 16进制字符串转字节数组
*
* [@param](/user/param) src 16进制字符串
* [@return](/user/return) 字节数组
*/
public static byte[] hexString2Bytes(String src) {
int l = src.length() / 2;
byte[] ret = new byte[l];
for (int i = 0; i < l; i++) {
ret[i] = (byte) Integer.valueOf(src.substring(i * 2, i * 2 + 2), 16).byteValue();
}
return ret;
}
hexString是:7B2538C2BB4D7EC2BA69C2B5C297C3A642C298C2A37A6449776A721101C398C387C2B9C289C28AC38423C28A337CC298C3BC1B这样的
转换byte后是: [123, 37, 56, -62, -69, 77, 126, -62, -70, 105,
然后我用ets的方法代码是以下:
/**
* 字符串转换字节流
* [@param](/user/param) hexString 字符串
* [@returns](/user/returns) 字节流
*/
static hexString2Bytes(hexString: string): Uint8Array {
let len = hexString.length
if (len % 2 != 0) {
hexString = "0" + hexString
}
const byteArray = new Array<number>()
for (let i = 0; i < hexString.length; i += 2) {
byteArray.push(parseInt(hexString.substring(i, i + 2), 16))
}
return new Uint8Array(byteArray)
}
但是转换后的byte是没有负数的,如下: [123, 37, 56, 194, 187, 77, 126, 194, 186, 105,
Button(‘测试’) .width(‘300lpx’) .height(‘300lpx’) .onClick(() => { function toSignedByte(hexString: string): number { const unsignedByte = parseInt(hexString, 16);
// 模拟Java中8位有符号整数的转换
const signedByte = ((unsignedByte << 24) >> 24);
return signedByte;
}
var s = '7B2538C2BB4D7EC2BA69C2B5C297C3A642C298C2A37A6449776A721101C398C387C2B9C289C28AC38423C28A337CC298C3BC1B'
for(var i = 0 ;i<s.length;i=i+2){
const signedByteValue = toSignedByte(s[i]+''+s[i+1]);
console.log('signedByteValue', signedByteValue); // signedByteValue -62
}
}) .width(‘100%’) .height(‘100%’)
另一个帖子也是,但是又有后续的问题
上面提到 模拟Java中8位有符号整数的转换
现在要把这个数组转成String,比如java版:
new String(hexString2Bytes(data), "UTF-8")
/**
* 16进制字符串转字节数组
*
* @param src 16进制字符串
* @return 字节数组
*/
public static byte[] hexString2Bytes(String src) {
int l = src.length() / 2;
byte[] ret = new byte[l];
for (int i = 0; i < l; i++) {
ret[i] = (byte) Integer
.valueOf(src.substring(i * 2, i * 2 + 2), 16).byteValue();
}
return ret;
}
那么这个new String(XX,“utf-8”)怎么写呢?
ets版我用这个写不行:
/**
* 字节流转成可理解的字符串
* @param uint8Array
* @returns
*/
static uint8ArrayToShowStr1(uint8Array: Uint8Array): string {
const textDecoder = util.TextDecoder.create("utf-8")
return textDecoder.decodeWithStream(uint8Array, {
stream: false
})
}
类型是Uint8Array,
在HarmonyOS鸿蒙Next中,char
类型用于表示单个字符,通常占用1个字节(8位)的存储空间。char
类型可以存储ASCII字符集中的字符,也可以用于存储Unicode字符集中的字符。
在鸿蒙Next中,char
类型的使用与其他操作系统中的C/C++语言类似,但鸿蒙Next提供了更多的API和框架来支持字符处理。例如,鸿蒙Next提供了Text
类来处理字符串,Text
类内部使用char
数组来存储字符数据。
鸿蒙Next中的char
类型可以用于定义字符变量、字符数组以及字符串常量。例如:
char ch = 'A'; // 定义一个字符变量
char str[] = "Hello, HarmonyOS"; // 定义一个字符数组
在鸿蒙Next中,char
类型还可以与Text
类进行交互。Text
类提供了丰富的方法来处理字符串,例如字符串的拼接、查找、替换等操作。例如:
Text text = "Hello, HarmonyOS";
char ch = text.charAt(0); // 获取字符串的第一个字符
此外,鸿蒙Next还提供了一些与字符处理相关的API,例如Character
类,该类提供了判断字符类型、转换字符大小写等方法。例如:
bool isDigit = Character.isDigit('5'); // 判断字符是否为数字
char lowerCh = Character.toLowerCase('A'); // 将字符转换为小写
总之,在HarmonyOS鸿蒙Next中,char
类型是处理字符数据的基本类型,开发者可以通过Text
类和Character
类等API来进行更复杂的字符处理操作。
在HarmonyOS鸿蒙Next中,char
是C语言中的基本数据类型,用于存储单个字符,占用1字节内存。开发者可以使用char
类型变量处理字符数据,如字符输入输出、字符串操作等。鸿蒙Next支持标准C库函数,如printf
、scanf
等,方便进行字符处理。此外,鸿蒙Next的API也提供了丰富的字符串处理功能,开发者可以结合char
类型进行高效开发。