1 Star 0 Fork 2

dx林/xl-uts-bluetooth-testapp-x-opensource

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
utils.uts 3.13 KB
一键复制 编辑 原始数据 按行查看 历史
dx林 提交于 2024-08-05 10:20 . 异常catch,增强健壮性
/**
* hex & bytes & number的操作工具
* @date 2024-07-20
*/
/**
* 将bytes转换为hex字符串
* @param src 要转换为hex字符串的字节数组
* @param [start=0] 从数组哪里开始转换?默认从0开始转换
* @param [len=src.length] 截止数组哪里进行转换,默认到数组结尾
*/
export function bytes2hex(src: number[], start: number = 0, len: number = src.length): string {
let hexStr = '';
for (let i = start; i < start + len; i++) {
let byte: number = src[i];
hexStr += ('00' + byte.toString(16)).slice(-2);
}
return hexStr.toUpperCase();
}
/**
* 将hex字符串转换为字节数组
* @param hex 十六进制字符串
* @param [start=0] 从字符串哪里开始进行转换,默认从0开始
* @param [len=hex.length] 截止字符串哪里进行转换,默认到字符串结尾
*/
export function hex2bytes(hex: string, start: number = 0, len: number = hex.length): number[] {
var bytes: number[] = [];
for (var c = start; c < start + len; c += 2)
bytes.push(parseInt(hex.substring(c, c + 2), 16));
return bytes;
}
/**
* 将有符号的byte转换为无符号的byte
* @param byte 要转换的字节
*/
export function toUnsignedByte(byte: number): number {
let newValue: number = byte;
if (((byte >> 7) & 0x01) == 1) {
newValue -= 256;
}
return newValue & 0xFF;
}
/**
* 将有符号的byte数组转换为无符号的byte数组,
* 注意,此函数不会改变原来的数组
* @param bytes 要转换的字节数组
*/
export function toUnsignedBytes(bytes: number[]): number[] {
let bytes_ret: number[] = [];
for (let i = 0; i < bytes.length; i++) {
bytes_ret.push(toUnsignedByte(bytes[i]));
}
return bytes_ret;
}
/** UTF8 转化为字符串 */
export function fromUTF8ToString(utf8Bytes: number[]): string {
let val = '';
utf8Bytes.forEach(item => {
if (item < 127) {
val += String.fromCharCode(item);
} else {
val += '%' + item.toString(16).toUpperCase();
}
});
try {
let ret: string | null = decodeURI(val);
if (ret != null) {
val = ret;
}
} catch (err) {
// 忽略任何异常。
console.error("fromUTF8ToString error", err);
}
return val;
}
/** 将字符串转化为utf-8字节 */
export function fromStringToUTF8(str: string): number[] {
let result: number[] = [];
try {
for (let i = 0; i < str.length; i++) {
let word: string | null = encodeURI(str.at(i)!);
if (word != null) {
if (word.length == 1) {
// 未转换的字符
result.push(word.charCodeAt(0)!);
} else {
// 转换成%XX形式的字符
let bytes = word.split("%");
for (let l = 1; l < bytes.length; l++) {
result.push(parseInt("0x" + bytes[l]));
}
}
}
}
} catch (err) {
// 忽略任何异常。
console.error("fromStringToUTF8 error", err);
}
return result;
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/dxl19981012/xl-uts-bluetooth-testapp-x-opensource.git
git@gitee.com:dxl19981012/xl-uts-bluetooth-testapp-x-opensource.git
dxl19981012
xl-uts-bluetooth-testapp-x-opensource
xl-uts-bluetooth-testapp-x-opensource
master

搜索帮助