StringToByte OR ByteTOString

本文介绍了一种在Java中将字节数组转换为十六进制字符串的方法。通过两个不同的类实现:第一个类提供了简洁的实现方式,适用于单个字节数组;第二个类则提供更详细的步骤说明,包括将单个字节和字节数组转换为十六进制字符串的方法。
public class ByteToString{
    
public  static void main(String args[]){
        
        
byte[] c={(byte)0x5A,(byte)0x08,(byte)0x00,(byte)0xFF,(byte)0xB2,(byte)0x33,(byte)0xDE,(byte)0xFF};
        System.out.println (ByteToString.byte2HexString(c));
    }

    
    
    
public static String  byte2HexString(byte []c){
        StringBuffer sb
=new StringBuffer();
        
for (int i = 0; i<c.length; i++{
            String s
=(String.format("%x",(int)c[i]&0xFF)).toUpperCase();
            
if(s.length()<2){
                sb.append(
"0");
            }

            sb.append(s);
        }

        
return  sb.toString();
    }

    
    
}

public class ByteTools {
  
/**
   * byte转化为字符串输出
   * 
   * 
@param b
   * 
@return
   
*/

  
public static String byteToString(byte b) {
    
byte high, low;
    
byte maskHigh = (byte0xf0;
    
byte maskLow = 0x0f;
    high 
= (byte) ((b & maskHigh) >> 4);
    low 
= (byte) (b & maskLow);
    StringBuffer buf 
= new StringBuffer();
    buf.append(findHex(high));
    buf.append(findHex(low));
    
return buf.toString();
  }


  
public static String byteToString(byte[] bs) {
    
byte high, low;
    
byte maskHigh = (byte0xf0;
    
byte maskLow = 0x0f;
    StringBuffer buf 
= new StringBuffer();
    
for (byte b : bs) {
      high 
= (byte) ((b & maskHigh) >> 4);
      low 
= (byte) (b & maskLow);
      buf.append(findHex(high));
      buf.append(findHex(low));
    }

    
return buf.toString();
  }


  
public static int stringToByte(String in, byte[] b) throws Exception {
    
if (b.length < in.length() / 2{
      
throw new Exception("byte array too small");
    }

    
int j = 0;
    StringBuffer buf 
= new StringBuffer(2);
    
for (int i = 0; i < in.length(); i++, j++{
      buf.insert(
0, in.charAt(i));
      buf.insert(
1, in.charAt(i + 1));
      
int t = Integer.parseInt(buf.toString(), 16);
      System.out.println(
"byte hex value:" + t);
      b[j] 
= (byte) t;
      i
++;
      buf.delete(
02);
    }

    
return j;
  }


  
private static char findHex(byte b) {
    
int t = new Byte(b).intValue();
    t 
= t < 0 ? t + 16 : t;
    
if ((0 <= t) && (t <= 9)) {
      
return (char) (t + '0');
    }

    
return (char) (t - 10 + 'A');
  }

}
### 如何在 Python 中将字节数据转换为字符串 在 Python 中,可以通过多种方式实现字节数据到字符串的转换。以下是几种常见的方法及其适用场景: #### 使用 `decode` 方法 最常用的方法是通过调用字节对象的 `.decode()` 方法将其解码为字符串。此方法需要指定编码格式,默认情况下为 UTF-8 编码[^2]。 ```python byte_data = b'example' string_data = byte_data.decode('utf-8') # 将字节数据解码为字符串 print(string_data) # 输出: example ``` 如果源数据采用其他编码(如 GBK 或 Latin-1),则需显式传递相应的编码参数给 `.decode()` 函数[^2]。 --- #### 利用 `str` 构造函数 另种方法是使用内置的 `str` 类型构造器来完成转换。该方法同样支持自定义编码设置,并允许忽略或替换非法字符。 ```python byte_data = b'\xff\xfe\xfd' try: string_data = str(byte_data, encoding='ascii', errors='ignore') except UnicodeDecodeError as e: print(f"Decoding error occurred: {e}") else: print(string_data) ``` 上述代码片段展示了如何处理可能引发异常的情况以及错误容忍机制的应用。 --- #### 结合结构化模块操作 当涉及复杂二进制序列解析时,可以借助标准库中的 `struct` 模块辅助完成任务。例如,利用其打包 (`pack`) 和拆包 (`unpack`) 功能调整目标平台上的字节顺序 (endianess),然后再执行常规字符串转化过程[^3]。 ```python import struct packed_data = struct.pack('>i', 700) # 大端模式下整数转字节数组 unpacked_value = struct.unpack('<i', packed_data)[0] # 转换回小端表示法下的数值 converted_string = str(unpacked_value).encode().decode() print(converted_string) # 展示最终得到的结果形式 ``` 注意这里的例子仅作演示用途;实际应用中应依据具体需求设计相应逻辑链路[^3]。 --- #### 针对特殊场合注意事项 有时会遇到因输入类型不匹配而导致的操作失败情形,比如尝试直接把字典或其他复合数据结构存入只接受简单原始值类型的存储介质里去的时候就会触发类似下面这样的错误提示信息:“redis.exceptions.DataError: Invalid input of type: 'dict'. Convert to a byte, string or number first.” 此类状况可通过预先验证并修正待写入项的内容特性加以规避[^4]^5]。 综上所述,掌握这些技巧有助于更灵活高效地应对各种编程挑战! 问题
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值