data = bytes.fromhex(hex_string) ^^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: fromhex() argument must be str, not bytes
时间: 2024-09-14 20:17:12 浏览: 40
当出现`TypeError: fromhex() argument must be str, not bytes`这样的错误时,这意味着你在调用`bytes.fromhex()`函数时传入了错误类型的参数。`fromhex()`函数期望的是一个字符串(str),它是一个包含十六进制数的字符串,而不是已经转换为字节的`bytes`对象。
如果你已经有了一个`bytes`对象并且想要将其转换为十六进制表示,你应该先将其转换为字符串,然后再转回字节。例如:
```python
# 假设原始的字节数据是
byte_data = b'\x00\x1f\xff'
# 首先将字节数据转换为十六进制字符串
hex_string = byte_data.hex()
# 然后从十六进制字符串创建新的字节对象
new_data = bytes.fromhex(hex_string)
# 或者直接使用decode()
# new_data = byte_data.decode('hex') (注意,这个功能在Python 3中已经被移除)
```
在这个例子中,`hex_string`就是你需要的十六进制字符串,然后你可以继续后续的操作,比如解码或其他处理。
相关问题
struct.unpack('!f', bytes.fromhex(hex_string))转为 js 代码
在 JavaScript 中,您可以使用 `DataView` 对象来实现与 `struct.unpack` 相似的功能。下面是一个将十六进制字符串转换为浮点数的示例代码:
```javascript
// 将十六进制字符串转换为二进制数据
const hexString = '40490fdb';
const binaryData = new Uint8Array(hexString.match(/.{1,2}/g).map(byte => parseInt(byte, 16)));
// 使用 DataView 将二进制数据解析为浮点数
const dataView = new DataView(binaryData.buffer);
const floatNumber = dataView.getFloat32(0, false); // 第二个参数表示是否使用大端字节序
console.log(floatNumber); // 输出 3.1415927410125732
```
需要注意的是,在 JavaScript 中,默认使用的是小端字节序,而 `struct.unpack('!f', bytes.fromhex(hex_string))` 使用的是大端字节序,因此需要将 `DataView` 的第二个参数设置为 `false`,以保持字节序的一致性。
C++ 从一个名为obj的字典中获取键为"data"的值,该值是一个16进制字符串。接着,使用fromhex()方法将其转换为字节类型的数据
在C++中,没有直接的方法可以将一个16进制字符串转换为字节类型的数据。但是,你可以使用一些C++标准库函数来实现这个功能。
首先,你需要将16进制字符串拆分成两个字符的组合。然后,将每个字符组合转换为一个整数值。最后,将这些整数值存储在一个unsigned char数组中。
下面是一个示例代码,演示了如何实现这个功能:
```c++
#include <string>
#include <iostream>
#include <vector>
std::vector<unsigned char> fromHex(const std::string& hexString) {
std::vector<unsigned char> result;
for (size_t i = 0; i < hexString.length(); i += 2) {
std::string byteString = hexString.substr(i, 2);
unsigned char byte = (unsigned char) strtol(byteString.c_str(), NULL, 16);
result.push_back(byte);
}
return result;
}
int main() {
std::string hexString = "48656c6c6f20576f726c64"; // "Hello World" in hex
std::vector<unsigned char> bytes = fromHex(hexString);
for (size_t i = 0; i < bytes.size(); i++) {
std::cout << bytes[i];
}
std::cout << std::endl;
return 0;
}
```
这个示例代码将一个16进制字符串转换为字节类型的数据,并将其输出到控制台。
阅读全文