---
title: aclGetDataType
description: "获取aclTensor的DataType，aclTensor由aclCreateTensor接口创建。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/API/aolapi/operatorlist_00030.html
sourcePath: /source/zh/canncommercial/900/API/aolapi/operatorlist_00030.html
indexId: a47d50e13acd2d33c6198317fc0f5fd785d26d7c98e62e069ac4cb342c85037b64
---
# aclGetDataType

#### 功能说明

获取aclTensor的DataType，aclTensor由aclCreateTensor接口创建。


#### 函数原型

```
aclnnStatus aclGetDataType(const aclTensor *tensor, aclDataType *dataType)
```


#### 参数说明

aclDataType是框架定义的一种数据类型枚举类，具体参见“aclDataType(https://www.hiascend.comdocument/detail/zh/canncommercial/900/API/runtimeapi/aclcppdevg_03_1346.html)”。


| 参数名 | 输入/输出 | 说明 |
| --- | --- | --- |
| tensor | 输入 | 输入的aclTensor。 |
| dataType | 输出 | 返回的aclTensor的数据类型。 |


#### 返回值说明

返回0表示成功，返回其他值表示失败，返回码列表参见公共接口返回码。

可能失败的原因：

- 返回161001：参数tensor或dataType为空指针。


#### 约束说明

无


#### 调用示例

假设已有aclTensor对象（xTensor），获取其数据类型、数据排布格式、维度、步长、偏移等属性，再根据这些属性创建一个新的aclTensor对象（yTensor ）。

关键代码示例如下，仅供参考，不支持直接拷贝运行。

```
// 1.创建xTensor
int64_t xViewDims = {2, 4};       
int64_t xStridesValue = {4, 1};  // 第1维步长4，第2维步长1
int64_t xStorageDims = {2, 4};    
xTensor = aclCreateTensor(xViewDims, 2, ACL_FLOAT16, xStridesValue, 0, ACL_FORMAT_ND, xStorageDims, 2, nullptr);

// 2. 获取xTensor的各种属性值
// 获取xTensor的逻辑shape，viewDims为{2, 4}, viewDimsNum为2
int64_t *viewDims = nullptr;
uint64_t viewDimsNum = 0;
auto ret = aclGetViewShape(xTensor, &viewDims, &viewDimsNum);
// 获取xTensor的数据类型为ACL_FLOAT16
aclDataType dataType = aclDataType::ACL_DT_UNDEFINED;
ret = aclGetDataType(xTensor, &dataType);
// 获取xTensor的步长信息，stridesValue为{4, 1}, stridesNum为2
int64_t *stridesValue = nullptr;
uint64_t stridesNum = 0;
ret = aclGetViewStrides(xTensor, &stridesValue, &stridesNum);
// 获取xTensor的首元素相对于storage的偏移值，offset为0
int64_t offset = 0;
ret = aclGetViewOffset(xTensor, &offset);
// 获取xTensor的数据排布格式为ACL_FORMAT_ND
aclFormat format = aclFormat::ACL_FORMAT_UNDEFINED;
ret = aclGetFormat(xTensor, &format);
// 获取xTensor的实际物理排布shape，storageDims为{2, 4}, storageDimsNum为2
int64_t *storageDims = nullptr;
uint64_t storageDimsNum = 0;
ret = aclGetStorageShape(xTensor, &storageDims, &storageDimsNum);
// device侧地址
void *deviceAddr;

// 3.根据xTensor的属性创建新的tensor
aclTensor *yTensor = aclCreateTensor(viewDims, viewDimsNum, dataType, stridesValue, offset, format, storageDims, storageDimsNum, deviceAddr);

// 4.手动释放内存
delete[] viewDims;
delete[] stridesValue;
delete[] storageDims;
```
